Мы можем получить доступ к элементам массива, используя цикл for:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Как я могу изменить этот код для доступа к текущему индексу тоже? Я хочу добиться этого с помощью синтаксиса for-of, ни forEach, ни for-in.
javascript
ecmascript-6
for-of-loop
Абденнур ТУМИ
источник
источник
for-of
с ,.entries()
и это в два раза медленнее по сравнению с.forEach()
. jsperf.com/for-of-vs-foreach-with-indexyield
ключевого слова. Но мне нужен доступ к индексу для моего варианта использования, так что ...;;
я думаю , что это простой старый цикл..entires()
?Array#entries
возвращает индекс и значение, если вам нужны оба:источник
document.styleSheets[0].cssRules.entries()
даже или,document.styleSheets.entries()
возможно, многих других итеративных структур DOM. Еще надо использовать_.forEach()
сlodash
for (var value of document.styleSheets) {}
. Если вам нужен индекс вы можете преобразовать значение в массив первым с помощьюArray.from
:for (let [index, value] of Array.from(document.styleSheets)) {}
.Array.from
такое FTWВ этом мире ярких новых нативных функций мы иногда забываем основы.
Чисто, эффективно, и вы все еще можете
break
петлю. Бонус! Вы также можете начать с конца и вернуться назадi--
!Дополнительное примечание: если вы много используете значение в цикле, вы можете сделать это
const value = arr[i];
в верхней части цикла для удобного и удобного чтения.источник
break
for-of
for (let [index, value] of array.entries())
.reverse()
в контексте html / js, в современных браузерах, с другими итерируемыми объектами, кроме массивов, мы могли бы также использовать [Iterable] .entries ():
источник
entries
метода для них.В
for..of
цикле мы можем достичь этого черезarray.entries()
.array.entries
возвращает новый объект-итератор Array. Объект-итератор знает, как получить доступ к элементам из итеративного объекта за один раз, одновременно отслеживая его текущую позицию в этой последовательности.При
next()
вызове метода на итераторе генерируются пары ключ-значение. В этих парах ключ-значение индекс массива является ключом, а элемент массива является значением.for..of
Цикл в основном конструкция , которая потребляет итератор и петлю по всем элементам ( с использованием итератора под капотом). Мы можем объединить это сarray.entries()
помощью следующего способа:источник
Вы также можете обрабатывать индекс самостоятельно, если вам нужен индекс , он не будет работать, если вам нужен ключ .
источник
Для тех , кто использует объекты , которые не являются
Array
или даже массив , как вы можете создать свою собственную итерацию легко , так что вы все еще можете использоватьfor of
для таких вещей , как ,localStorage
которые на самом деле есть толькоlength
:Тогда просто введите номер:
источник
ES6
for...in
источник
for...of
петле, а не оfor...in
for...in
является частью оригинальной спецификации ECMAScript (то есть "es1"). Также обратите внимание, чтоfor...in
он предназначен для перебора свойств объекта. Хотя он может перебирать массивы, он может делать это не в ожидаемом порядке. См. Больше в документации MDNДругой подход может быть использован
Array.prototype.forEach()
какисточник
цикл for проходит через массив, а свойство indexof принимает значение индекса, соответствующего массиву. У этого метода есть некоторые недостатки с числами, поэтому используйте фрукты
источник
["apple", "apple", "pear"]
приведенных индексов0, 0, 2
вместо0, 1, 2
.