Каков наиболее переносимый способ удаления элемента из многомерного массива в JavaScript? - PullRequest
2 голосов
/ 25 декабря 2011

Каков наиболее переносимый способ удаления элемента из многомерного разреженного массива в javascript?

Будет ли хорошо работать следующее, если строки иногда могут быть неопределенными?

if( content[row] ) {
    delete content[row][col];
}

Будет ли это работать и будет ли лучше?

if( r=content[row] ) {
    delete r[col];
}

Ответы [ 2 ]

7 голосов
/ 25 декабря 2011

Это зависит.delete оставит пустое пространство в массиве, где был элемент, например:

var arr = [0, 1, 2, 3];
delete arr[1];
arr; // [0, undefined, 2, 3]

Чтобы удалить элемент из массива, не оставляя дыры, вы должны использовать splice():

arr.splice(1, 1); // Start deleting at index 1, delete one element
arr; // [0, 2, 3]

Оба ваших примера работают просто отлично - если content[row] не существует, тело оператора if не будет оцениваться.

1 голос
/ 25 декабря 2011

Вам нужно не только удалить элемент, но и настроить длину массива.

Обычно я устанавливаю индекс последнего элемента в массиве для заменяемого элемента, удаляю последний элемент,и уменьшить длину.Это быстро, но не сохраняет структуру массива.

Вот выдержка из моего GameAPI, над которым я работаю:

a - массив, i - индекс

removeAt    : function(a, i) {

    //Removes an element in array

    if(!(a.length>i)) return false;

    delete a[i];
    a[i] = a[a.length-1];
    delete a[a.length-1];
    a.length--;

    return true;
}
...