Задать вопрос
@MdaUZH

Почему после удаления элементов не изменяется длина массива?

Ещё раз всем привет.

обнаружил странность:
var arr = ["test","two",3];
console.log(arr.length); // 3
delete arr[0];
console.log(arr.length); // 3
arr[4] = 'four';
console.log(arr.length); // 5
delete arr[0];
delete arr[2];
delete arr[3];
console.log(arr.length); // 5


В чем проблема, понять не могу, почему длинна массива остается преждней?
  • Вопрос задан
  • 617 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 3
DevMan
@DevMan
a = [];
a[1000] = 1;
console.log(a); // [1000: 1]
a.length; // 1001

свойство length равно максимальному индексу плюс 1, а не фактическому кол-ву элементов.

arr = ["test","two",3]; // ["test", "two", 3]
arr.length; // 3
arr.splice(0,2) // [3]
arr.length; // 1
Ответ написан
@teslor
Ваш код не совсем корректен. Оператор delete не предназначен для работы с массивами, т.к. не обновляет длину. То же касается и присвоения arr[4] = 'four'. Такое присвоение используется только если 4-й элемент уже есть и его нужно изменить.
Для удаления/добавления элементов нужно использовать только методы, специально предназначенные для массивов: push/pop, shift/unshift, splice. Только в этом случае длина будет правильной.
Т.е. для определения длины вполне можно использовать свойство length (оно для этого и предназначено), но нужно использовать методы массива для добавления/удаления элементов.
Например:
var arr = ["test", "two", 3];
console.log(arr.length); // 3
arr.shift(0);
console.log(arr.length); // 2
arr.push('four');
console.log(arr.length); // 3
arr.splice(0, 3);
console.log(arr.length); // 0
Ответ написан
Комментировать
Ni55aN
@Ni55aN
length работает правильно лишь в том случае, когда все элементы проиндексированы строго от 0 до length-1, так как length равен наибольшему целочисленному индексу и +1
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
delete не удаляет свойство, только значение

теперь ваш массив
arr[undefined, undefined, undefined, undefined, undefined]
длинной 5
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы