Объект Javascript с массивом, удаляя его, фактически удаляет элемент?

У меня есть объект:

data.Dealer.car[0]
               [1]
               [2]

Если я это сделаю:

alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);

Он дает мне один и тот же счет каждый раз из предупреждения, хотя фактический элемент массива теперь не существует?

Любые идеи?

Ответы

Ответ 1

Матрицы JavaScript не являются разреженными, если у вас есть 0 и 2, то элемент 1 должен существовать. Значение length будет равно 3.

Ответ 2

Если вы хотите удалить элемент, используйте метод splice:

alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);

Но заметьте, что индексы изменились.

Ответ 3

Array.shift() удалит первый элемент из массива и сделает его короче. Array.pop() удалит последний элемент.

Ответ 4

Основываясь на том, что опубликовал @Ray Hidayat:

Матрицы JavaScript являются разреженными. Если у вас есть массив длиной 3, удаление ссылки в [1] просто "отменяет" этот элемент, а не удаляет его из массива или обновляет длину массива. Вы можете сделать то же самое с

myArray = [0, , 2, , , , ];  // length 6; last three items undefined

Здесь сценарий: http://jsfiddle.net/WYKDz/

ПРИМЕЧАНИЕ. Удаление элементов из середины больших массивов может быть интенсивным с вычислительной точки зрения. См. Это сообщение для получения дополнительной информации: Самый быстрый способ удалить одну запись из середины массива()

Ответ 5

Я думаю, вы ищете это:

var arr = [0,1,2,3,4];

alert( arr.splice( 2, 1 ) ); // alerts 2, the element you're removing
alert( arr ) // alerts 0,1,3,4  - the remaining elements

здесь Ссылка MDC

Ответ 6

Ok.. исправлено это теперь, когда массив все еще был выделен.

Мне нужно было в основном:

var newCar = new Array();
for (i = 0 ; i < tblSize -2; i ++)
{
    newCar[i]=data.Dealer.car[i];
}
data.Dealer.car = newCar;