Respostas:
.forEach
já tem essa capacidade:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Mas se você quiser as habilidades de for...of
, poderá map
colocar o array no índice e valor:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Isso é um pouco longo, por isso pode ajudar a colocá-lo em uma função reutilizável:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Versão Iterável
Isso funcionará ao direcionar o ES3 ou o ES5 se você compilar com a --downlevelIteration
opção de 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 +
Se você conseguir segmentar ambientes ES6 +, poderá usar o .entries()
método descrito na resposta de Arnavion .
Array.some()
e retornar false na iteração que deseja parar. Não é tão claro ou bonito como um, break
mas faria o trabalho. Pessoalmente, eu não gosto, provavelmente reescreveria a iteração de alguma outra maneira :) veja 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()) { ... }
No TS, isso requer direcionar o ES2015, pois requer o tempo de execução para oferecer suporte aos iteradores , o que os tempos de execução do ES5 não. Obviamente, você pode usar algo como Babel para fazer com que a saída funcione nos tempos de execução do ES5.
"Javascript da velha escola" para o resgate (para quem não conhece / gosta de programação funcional)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Você pode usar o operador for..in TypeScript para acessar o índice ao lidar com coleções.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Resultado:
0: 7
1: 8
2: 9
Ver demonstração
for..in
também pode oferecer mais do que você esperava, pois inclui também todas as funções declaradas em um objeto. Por exemplo:for (var prop in window.document) { console.log(prop); }