Доступ к индексу элемента массива ES6 внутри цикла for-of
мы можем получить доступ к элементам массива с помощью цикла for-of:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Как я могу изменить этот код, чтобы получить доступ к текущему индексу тоже? Я хочу добиться этого, используя для синтаксиса, ни объекту, ни к-в.
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..ofloop-это в основном конструкция, которая потребляет итерацию и циклически проходит через все элементы (используя итератор под капотом). Мы можем объединить это с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