2015-12-18 15 views

risposta

89

Uso Array.prototype.keys:

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

Se si desidera accedere sia la chiave e il valore, è possibile utilizzare Array.prototype.entries() con destructuring:

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

+16

Nel caso in cui qualcuno si aspetti, ho provato 'for-of' con' .entries() 'ed è due volte più lento rispetto a' .forEach() '. https://jsperf.com/for-of-vs-foreach-with-index – K48

+0

@ K48 bello sapere, utilizzare "reverse for-loop" se si desidera avere il più veloce in es: https: //www.incredible -web.com/blog/performance-of-for-loops-with-javascript/ – nimo23

+0

Purtroppo, ho bisogno di cedere da dentro un ciclo annidato. Impossibile utilizzare forEach, poiché la funzione crea problemi di ambito per la parola chiave 'yield'. Ma ho bisogno di accedere all'indice per il mio caso d'uso, quindi ... vecchio di base ';; loop è, suppongo. –

189

Array#entries restituisce l'indice e il valore, se avete bisogno di entrambi:

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

} 
+0

Con TypeScript: 'TS2495: Type IterableIterator non è un tipo di array o un tipo di stringa'. Sembra che questo sarà risolto: https://github.com/Microsoft/TypeScript/pull/12346 – Johannes

+2

Anche Internet Explorer non è supportato. – Sammi

+0

Bello! Questo sembra funzionare anche con 'const'. – Eliot

1

nel contesto html/js, il browser moderni, con altri oggetti iterabili degli array potremmo anche usare [Iterable] .entries() :

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

    element.innerHTML = '#' + index 

} 
Problemi correlati