#javascript #arrays #for-loop
#javascript #массивы #for-цикл
Вопрос:
У меня есть несколько примеров кода:
var array = [];
array[0] = {id:0};
array[1] = {id:1};
array[2] = {id:2};
Теперь массив выглядит следующим образом
[Object{id=0}, Object{id=1}, Object{id=2}]
Я использую сращивание:
array.splice(0,1);
И у нас есть:
[Object{id=1}, Object{id=2}]
Когда я пытаюсь, for
или for ... in
длина будет всего 2, и я не могу выполнить итерацию обычным способом. Результатом цикла является:
undefined
Object{id:1}
В первом случае (когда мы используем for
) я понимаю, почему это не сработало, но for ... in
должны возвращаться индексы 1 и 2, а не 0 и 1…
Кто-нибудь может объяснить мне, что я делаю не так?
Комментарии:
1. Конечно, вы можете. Просто выполните итерацию от 0 до array.length (которая равна 1)…
for (var i = 0; i < array.length; i ) { ...
2. Опубликованный вами код в порядке (смотрите мой рабочий пример вашего кода: jsfiddle.net/PNeRk ). Можете ли вы опубликовать свой код цикла?
Ответ №1:
Что вы пробовали? Если я выдам
var array = [];
array[0] = {id:0};
array[1] = {id:1};
array[2] = {id:2};
array.splice(0,1);
for (var i = 0, len = array.length; i < len; i )
console.log(i ":", array[i]);
движок корректно выводит
0: Object { id=1 }
1: Object { id=2 }
(но индексы массива меняются на 0
и 1
, возможно, это то, что вас смущает; помните, что Array.splice
по умолчанию удаляет начиная с элемента 0
и далее и сдвигает все оставшиеся элементы вниз).
Обновление: помимо того, что вы всегда можете получить id
свойство отдельных объектов с помощью array[i].id
, вы можете удалять элементы массива, не сдвигая другие элементы с помощью delete
оператора. После того, как я заменю array.splice(0,1)
на
delete array[0];
вывод показывает
0: undefined
1: Object { id=1 }
2: Object { id=2 }
Комментарии:
1. Точно! Но проблема в том, что я не хочу уменьшать индексы, потому что в некоторых случаях я должен ссылаться на это. Я должен использовать delete или что?