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



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



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


Как я могу изменить этот код, чтобы получить доступ к текущему индексу тоже? Я хочу добиться этого, используя для синтаксиса, ни объекту, ни к-в.

508   7  

7 ответов:

использовать Array.prototype.keys:

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

если вы хотите получить доступ как к ключу, так и к значению, вы можете использовать Array.prototype.entries() С деструктурируется:

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

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

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

}

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

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

    element.innerHTML = '#' + index

}

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

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

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

для тех, кто использует объекты, которые не являются Array или даже массив-как, вы можете построить свой собственный iterable легко, так что вы все еще можете использовать 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))
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 принимает значение индекса, соответствующего массиву. P. D Этот метод имеет некоторые недостатки с числами, поэтому используйте фрукты

на for..of цикл мы можем достичь этого через array.entries(). array.entries возвращает новый объект итератора массива. Объект итератора знает, как получить доступ к элементам из итерационного в то время, сохраняя при этом свое текущее положение в этой последовательности.

когда next() метод вызывается на итераторе генерируются пары значений ключа. В этих парах ключевых значений массив индекс - это ключ, а элемент массива-это значение.

let arr = ['a', 'b', 'c'];
let iterator = arr.entries();
console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']

A for..of loop-это в основном конструкция, которая потребляет итерацию и циклически проходит через все элементы (используя итератор под капотом). Мы можем объединить это с array.entries() следующим образом:

array = ['a', 'b', 'c'];

for (let indexValue of array.entries()) {
  console.log(indexValue);
}


// we can use array destructuring to conveniently
// store the index and value in variables
for (let [index, value] of array.entries()) {
   console.log(index, value);
}

Comments

    Ничего не найдено.