Ответ 1
Почему никто не дает правильного ответа? Вы НИКОГДА не перезапускаете массивы с помощью цикла for/in
- это только для итерации простых объектов и их ключей, а не для итерации элементов в массиве.
Вы повторяете массивы для цикла for следующим образом:
var words = ['word1', 'word2', 'word3'];
for (var i = 0, len = words.length; i < len; i++) {
// here words[i] is the array element
}
Или в современном браузере вы можете использовать метод массивов .forEach()
:
var words = ['word1', 'word2', 'word3'];
words.forEach(function(value, index, array) {
// here value is the array element being iterated
});
Подробнее о .forEach()
см. здесь, в MDN.
Ссылка ndp на этот пост показывает некоторые хорошие примеры вещей, которые могут пойти не так, используя for/in
с массивами. Вы можете заставить его работать иногда, но это не умный способ итерации массива Javascript.
Или в более современное время вы можете использовать конструкцию ES6 for/of
, которая специально создана для итерации итерации (массив является итерабельным):
var words = ['word1', 'word2', 'word3'];
for (const w of words) {
console.log(w);
}
Или, если вы хотите как значение, так и индекс, вы можете сделать это:
var words = ['word1', 'word2', 'word3'];
for (const [index, w] of words.entries()) {
console.log(index, ": ", w);
}
Существует несколько преимуществ for/of
над .forEach()
. Для начала у вас больше управления контуром, так как вы можете использовать break
, continue
, return
для управления потоком цикла, который .forEach()
не дает вам. Кроме того, нет дополнительных накладных расходов для функции обратного вызова, поэтому в некоторых средах она может быть быстрее.