Как правильно вывести список элементов из массива после сращивания

#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 или что?