Доступ к элементу элемента массива ES6 внутри цикла for-of

Мы можем получить доступ к элементам массива с помощью цикла for-loop:

for (const j of [1, 2, 3, 4, 5]) {
  console.log(j);
}

Как мне изменить этот код для доступа к текущему индексу? Я хочу добиться этого, используя синтаксис for-of, ни forEach, ни in-in.

Ответ 1

Используйте Array.prototype.keys:

for (const index of [1, 2, 3, 4, 5].keys()) {
  console.log(index);
}

Ответ 2

Array#entries возвращает индекс и значение, если вам нужны оба:

for (let [index, value] of array.entries()) {

}

Ответ 3

В этом мире ярких новых нативных функций мы иногда забываем основы.

for (let i = 0; i < arr.length; i++) {
    console.log('index:', i, 'element:', arr[i]);
}

Чисто, эффективно, и вы все еще можете break петлю. Бонус! Вы также можете начать с конца и вернуться назад с i-- !

Дополнительное примечание: если вы много используете значение в цикле, вы можете сделать const value = arr[i]; в верхней части цикла для легкой, читаемой ссылки.

Ответ 4

в контексте html/js, в современных браузерах, с другими итерируемыми объектами, кроме массивов, мы могли бы также использовать [Iterable].entries():

for(let [index, element] of document.querySelectorAll('div').entries()) {

    element.innerHTML = '#' + index

}

Ответ 5

В цикле 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']

Ответ 6

Для тех, кто использует объекты, которые не являются 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))

Ответ 7

es6 for...in

for(const index in [15, 64, 78]) {                        
    console.log(index);
}

Ответ 8

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 принимает значение индекса, соответствующего массиву. У этого метода есть некоторые недостатки с числами, поэтому используйте фрукты