Podemos acessar elementos do array usando um loop for-of:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Como posso modificar esse código para acessar também o índice atual? Quero conseguir isso usando a sintaxe for-of, nem forEach nem for-in.
javascript
ecmascript-6
for-of-loop
Abdennour TOUMI
fonte
fonte
for-of
com.entries()
e é duas vezes mais lento em comparação com.forEach()
. jsperf.com/for-of-vs-foreach-with-indexyield
palavra - chave. Mas preciso acessar o índice para o meu caso de uso, então ...;;
acho que é um loop antigo básico ..entires()
?Array#entries
retorna o índice e o valor, se você precisar de ambos:fonte
document.styleSheets[0].cssRules.entries()
ou mesmodocument.styleSheets.entries()
e provavelmente muitas outras estruturas iteráveis do DOM. Ainda tem que usar_.forEach()
fromlodash
for (var value of document.styleSheets) {}
. Se você precisa fazer o índice pode converter o valor para uma matriz primeira viaArray.from
:for (let [index, value] of Array.from(document.styleSheets)) {}
.Array.from
é FTWNesse mundo de novas funções nativas chamativas, às vezes esquecemos o básico.
Limpo, eficiente e você ainda pode fazer
break
o loop. Bônus! Você também pode começar do final e retrocederi--
!Nota adicional: se você estiver usando muito o valor dentro do loop, convém fazer isso
const value = arr[i];
na parte superior do loop para obter uma referência fácil e legível.fonte
break
umafor-of
efor (let [index, value] of array.entries())
é muito mais fácil de ler. Retroceder é tão fácil quanto adicionar.reverse()
.no contexto html / js, em navegadores modernos, com outros objetos iteráveis que Arrays, também poderíamos usar [Iterable] .entries ():
fonte
entries
método para eles.Em um
for..of
loop, podemos conseguir isso viaarray.entries()
.array.entries
retorna um novo objeto iterador de matriz. Um objeto iterador sabe como acessar itens de um iterável por vez, mantendo o controle de sua posição atual nessa sequência.Quando o
next()
método é chamado no iterador, os pares de valores de chave são gerados. Nesses pares de valores-chave, o índice da matriz é a chave e o item da matriz é o valor.Um
for..of
loop é basicamente uma construção que consome um iterável e percorre todos os elementos (usando um iterador sob o capô). Podemos combinar issoarray.entries()
da seguinte maneira:fonte
Você também pode lidar com o índice se precisar do índice ; ele não funcionará se você precisar da chave .
fonte
Para aqueles que usam objetos que não são
Array
parecidos com um array ou mesmo com array, você pode criar seu próprio iterável facilmente para continuar usandofor of
coisas como aslocalStorage
que realmente têm apenaslength
:Em seguida, basta alimentar um número:
fonte
es6
for...in
fonte
for...of
loop, não umfor...in
for...in
faz parte da especificação original do ECMAScript (ou seja, "es1"). Além disso, observe quefor...in
se destina à iteração sobre as propriedades do objeto. Embora possa iterar sobre matrizes, pode não fazê-lo na ordem esperada. Veja mais na documentaçãoOutra abordagem poderia estar usando
Array.prototype.forEach()
comofonte
o loop for percorre a matriz, enquanto a propriedade indexof obtém o valor do índice que corresponde à matriz. PD este método tem algumas falhas com números, então use frutas
fonte
["apple", "apple", "pear"]
os índices fornecidos são em0, 0, 2
vez de0, 1, 2
.