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
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 requieren . Por supuesto, puede usar algo como Babel para hacer que la salida funcione en tiempos de ejecución ES5.
.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++;
}
}