2009-09-27 2 views
1

Я использую Google Web Tools и имею JsArray, который я заполняю данными от JSON. Я могу изменять элементы в массиве и добавлять к нему элементы, но я не могу понять, как удалить из него. Я ищу что-то похожее на метод pop() в JavaScript.Как удалить элемент из JsArray в Google Web Tools?

Я могу добавить элемент в массив с помощью set(index,value) метода с index, который находится вне диапазона массива, поэтому я попытался с помощью set(index,null), чтобы удалить его, но массив еще есть элемент, это просто пустое. (т. е. длина массива не изменилась.)

В настоящее время я использую хакерский метод, с помощью которого я создаю новый массив и копирую все элементы, кроме последнего, от старого к новому, но я надеюсь Мне не нужно с этим жить, потому что это уродливо.

private final JsArray<JsArrayInteger> popItemFromArray(
     JsArray<JsArrayInteger> oldArray) { 
    // the createEmpty... method is a native method which returns eval("[]") 
    JsArray<JsArrayInteger> newArray = createEmptyIntIntArray(); 

    for (int i = 0; i < oldArray.length() - 1; i++) { 
     newArray.set(i, oldArray.get(i)); 
    } 

    return newArray; 
} 

ответ

1

Там нет pop(), но есть ... shift() :)

Либо это, либо продлить JsArray класса, что-то вроде этого (не проверял, но вы должны получить идею):

public class JsArrayPop<T extends JavaScriptObject> extends JsArray<T> { 

    protected JsArrayPop() { 
    } 

    public final native T pop() /*-{ 
    return this.pop(); 
    }-*/; 

} 
+0

Я не вижу метод 'shift()', если только это не шутка, которая прошла по моей голове, но расширение класса 'JsArray' делает трюк. – sernaferna

+1

Возможно, это потому, что я использую свою собственную сборку 2.0-SNAPSHOT, но я уверен, что моя версия 'com.google.gwt.core.client.JsArray ' имеет метод 'shift()' (конечно, это так же просто, как метод 'pop()', поэтому вы можете легко добавить его). –

Смежные вопросы