recorrer objeto loop index how for for-loop foreach typescript

for-loop - objeto - typescript for syntax



¿TypeScript para... de con índice/clave? (5)

"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]; }

Como se describe here TypeScript presenta un bucle foreach:

var someArray = [9, 2, 5]; for (var item of someArray) { console.log(item); // 9,2,5 }

¿Pero no hay ningún índice / clave? Esperaría algo como:

for (var item, key of someArray) { ... }


O otra solución de la vieja escuela:

var someArray = [9, 2, 5]; let i = 0; for (var item of someArray) { console.log(item); // 9,2,5 i++; }


Puede utilizar 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



.forEach ya tiene esta habilidad:

var someArray = [9, 2, 5]; someArray.forEach((item, index) => { console.log(item); // 9, 2, 5 console.log(index); // 0, 1, 2 });

Pero si desea las habilidades de for...of , entonces puede map la matriz al elemento e indexar:

for (const {item, index} of someArray.map((item, index) => ({ item, index }))) { console.log(item); // 9, 2, 5 console.log(index); // 0, 1, 2 }

Eso es un poco largo, por lo que es útil incluirlo en una función reutilizable:

function toItemIndexes<T>(a: T[]) { return a.map((item, index) => ({ item, index })); } for (const {item, index} of toItemIndexes(someArray)) { // ..etc.. }

Versión Iterable

Esto funcionará cuando apunte a ES3 o ES5 si compila con la opción del compilador --downlevelIteration .

function* toItemIndexes<T>(items: T[] | IterableIterator<T>) { let index = 0; for (const item of items) { yield { item, index }; index++; } }