Ответ 1
Используйте Array.prototype.keys
:
for (const index of [1, 2, 3, 4, 5].keys()) {
console.log(index);
}
Мы можем получить доступ к элементам массива с помощью цикла for-loop:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Как мне изменить этот код для доступа к текущему индексу? Я хочу добиться этого, используя синтаксис for-of, ни forEach, ни in-in.
Используйте Array.prototype.keys
:
for (const index of [1, 2, 3, 4, 5].keys()) {
console.log(index);
}
Array#entries
возвращает индекс и значение, если вам нужны оба:
for (let [index, value] of array.entries()) {
}
В этом мире ярких новых нативных функций мы иногда забываем основы.
for (let i = 0; i < arr.length; i++) {
console.log('index:', i, 'element:', arr[i]);
}
Чисто, эффективно, и вы все еще можете break
петлю. Бонус! Вы также можете начать с конца и вернуться назад с i--
!
Дополнительное примечание: если вы много используете значение в цикле, вы можете сделать const value = arr[i];
в верхней части цикла для легкой, читаемой ссылки.
в контексте html/js, в современных браузерах, с другими итерируемыми объектами, кроме массивов, мы могли бы также использовать [Iterable].entries():
for(let [index, element] of document.querySelectorAll('div').entries()) {
element.innerHTML = '#' + index
}
В цикле for..of
мы можем достичь этого с помощью array.entries()
. array.entries
возвращает новый объект-итератор Array. Объект-итератор знает, как получить доступ к элементам из итеративного объекта в то же время, отслеживая его текущую позицию в этой последовательности.
Когда метод next()
вызывается для пары значений ключа итератора, создаются. В этих парах ключ-значение индекс массива является ключом, а элемент массива является значением.
let arr = ['a', 'b', 'c'];
let iterator = arr.entries();
console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']
Для тех, кто использует объекты, которые не являются Array
или даже похожими на массивы, вы можете легко создать свою собственную итерацию, чтобы вы могли использовать for of
для таких вещей, как localStorage
которые действительно имеют length
:
function indexerator(length) {
var output = new Object();
var index = 0;
output[Symbol.iterator] = function() {
return {next:function() {
return (index < length) ? {value:index++} : {done:true};
}};
};
return output;
}
Тогда просто введите номер:
for (let index of indexerator(localStorage.length))
console.log(localStorage.key(index))
es6 for...in
for(const index in [15, 64, 78]) {
console.log(index);
}
var fruits = ["apple","pear","peach"];
for (fruit of fruits) {
console.log(fruits.indexOf(fruit));
//it shows the index of every fruit from fruits
}
цикл for проходит через массив, а свойство indexof принимает значение индекса, соответствующего массиву. У этого метода есть некоторые недостатки с числами, поэтому используйте фрукты