Ответ 1
Матрицы JavaScript не являются разреженными, если у вас есть 0 и 2, то элемент 1 должен существовать. Значение length
будет равно 3.
У меня есть объект:
data.Dealer.car[0]
[1]
[2]
Если я это сделаю:
alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);
Он дает мне один и тот же счет каждый раз из предупреждения, хотя фактический элемент массива теперь не существует?
Любые идеи?
Матрицы JavaScript не являются разреженными, если у вас есть 0 и 2, то элемент 1 должен существовать. Значение length
будет равно 3.
Если вы хотите удалить элемент, используйте метод splice
:
alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);
Но заметьте, что индексы изменились.
Array.shift() удалит первый элемент из массива и сделает его короче. Array.pop() удалит последний элемент.
Основываясь на том, что опубликовал @Ray Hidayat:
Матрицы JavaScript являются разреженными. Если у вас есть массив длиной 3, удаление ссылки в [1] просто "отменяет" этот элемент, а не удаляет его из массива или обновляет длину массива. Вы можете сделать то же самое с
myArray = [0, , 2, , , , ]; // length 6; last three items undefined
Здесь сценарий: http://jsfiddle.net/WYKDz/
ПРИМЕЧАНИЕ. Удаление элементов из середины больших массивов может быть интенсивным с вычислительной точки зрения. См. Это сообщение для получения дополнительной информации: Самый быстрый способ удалить одну запись из середины массива()
Я думаю, вы ищете это:
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
Ok.. исправлено это теперь, когда массив все еще был выделен.
Мне нужно было в основном:
var newCar = new Array();
for (i = 0 ; i < tblSize -2; i ++)
{
newCar[i]=data.Dealer.car[i];
}
data.Dealer.car = newCar;