Podemos acceder a los elementos de la matriz utilizando un bucle for-of:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
¿Cómo puedo modificar este código para acceder también al índice actual? Quiero lograr esto usando la sintaxis for-of, ni forEach ni for-in.
javascript
ecmascript-6
for-of-loop
Abdennour TOUMI
fuente
fuente
for-of
con.entries()
y es dos veces más lento en comparación con.forEach()
. jsperf.com/for-of-vs-foreach-with-indexyield
palabra clave. Pero necesito acceso al índice para mi caso de uso, así que ...;;
supongo que es un bucle viejo y básico ..entires()
?Array#entries
devuelve el índice y el valor, si necesita ambos:fuente
document.styleSheets[0].cssRules.entries()
o inclusodocument.styleSheets.entries()
y probablemente muchas otras estructuras iterables DOM. Todavía tengo que usar_.forEach()
delodash
for (var value of document.styleSheets) {}
. Si es necesario el índice se puede convertir el valor a un array primero a través deArray.from
:for (let [index, value] of Array.from(document.styleSheets)) {}
.Array.from
es FTWEn este mundo de nuevas y llamativas funciones nativas, a veces olvidamos lo básico.
Limpio, eficiente, y aún puedes seguir
break
el ciclo. ¡Prima! ¡También puedes comenzar desde el final e ir hacia atrás coni--
!Nota adicional: si está utilizando mucho el valor dentro del ciclo, es posible que desee hacerlo
const value = arr[i];
en la parte superior del ciclo para obtener una referencia fácil y legible.fuente
break
unafor-of
yfor (let [index, value] of array.entries())
es mucho más fácil de leer. Retroceder es tan fácil como agregar.reverse()
.en el contexto html / js, en los navegadores modernos, con otros objetos iterables que las matrices, también podríamos usar [Iterable] .entries ():
fuente
entries
método para ellos.En un
for..of
bucle podemos lograr esto a través dearray.entries()
.array.entries
devuelve un nuevo objeto iterador de matriz. Un objeto iterador sabe cómo acceder a los elementos de uno iterable en ese momento, mientras realiza un seguimiento de su posición actual dentro de esa secuencia.Cuando
next()
se llama al método en el iterador, se generan pares de valores clave. En estos pares de valores clave, el índice de matriz es la clave y el elemento de matriz es el valor.UNA
for..of
bucle es básicamente una construcción que consume un iterable y recorre todos los elementos (usando un iterador debajo del capó). Podemos combinar estoarray.entries()
de la siguiente manera:fuente
También puede manejar el índice usted mismo si necesita el índice , no funcionará si necesita la clave .
fuente
Para aquellos que usan objetos que no son como una
Array
matriz, incluso pueden crear su propio iterable fácilmente para que aún puedan usarlofor of
para cosas como laslocalStorage
que realmente solo tienen unlength
:Luego solo dale un número:
fuente
es6
for...in
fuente
for...of
bucle, no unfor...in
for...in
es parte de la especificación ECMAScript original (es decir, "es1"). Además, tenga en cuenta quefor...in
está destinado a iterar sobre las propiedades del objeto. Si bien puede iterar sobre matrices, puede que no lo haga en el orden esperado. Ver más en la documentación de MDNOtro enfoque podría estar usando
Array.prototype.forEach()
comofuente
el bucle for atraviesa la matriz, mientras que la propiedad indexof toma el valor del índice que coincide con la matriz. PD: este método tiene algunos defectos con los números, así que usa frutas
fuente
["apple", "apple", "pear"]
los índices dados son en0, 0, 2
lugar de0, 1, 2
.