Respuestas:
.forEach
ya tiene esta habilidad:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Pero si desea las habilidades de for...of
, entonces puede map
colocar la matriz en el índice y el valor:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Eso es un poco largo, por lo que puede ser útil ponerlo en una función reutilizable:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Versión Iterable
Esto funcionará cuando apunte a ES3 o ES5 si compila con la --downlevelIteration
opción del compilador.
function* toEntries<T>(values: T[] | IterableIterator<T>) {
let index = 0;
for (const value of values) {
yield [index, value] as const;
index++;
}
}
Array.prototype.entries () - ES6 +
Si puede apuntar a entornos ES6 +, puede usar el .entries()
método como se describe en la respuesta de Arnavion .
Array.some()
y devolver falso en la iteración que desea detener. No es tan claro o bonito como un break
pero podría hacer el trabajo. Personalmente no me gusta, probablemente volvería a escribir la iteración de alguna otra manera :) ver stackoverflow.com/questions/2641347/…
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
for (var [key, item] of someArray.entries()) { ... }
En TS, esto requiere apuntar a ES2015 ya que requiere el tiempo de ejecución para admitir iteradores , que los tiempos de ejecución de ES5 no. Por supuesto, puede usar algo como Babel para que la salida funcione en tiempos de ejecución ES5.
"Old school javascript" al rescate (para aquellos que no están familiarizados / aman la programación funcional)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Puede usar el operador for..in TypeScript para acceder al índice cuando trabaje con colecciones.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Salida:
0: 7
1: 8
2: 9
Ver demo
for..in
también puede darle más de lo que esperaba, ya que también incluye todas las funciones declaradas en un objeto. Por ejemplo:for (var prop in window.document) { console.log(prop); }