Відповіді:
.forEach
вже має цю здатність:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Але якщо ви хочете здібностей for...of
, то ви можете map
масив до індексу та значення:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Це небагато часу, тому це може допомогти ввести його у багаторазову функцію:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Ітерабельна версія
Це буде працювати при націлюванні на ES3 або ES5, якщо ви компілюєте з параметром --downlevelIteration
компілятора.
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 +
Якщо ви можете орієнтуватися на середовища ES6 +, тоді ви можете скористатися .entries()
методом, визначеним у відповіді Arnavion .
Array.some()
та повертати помилкові під час ітерації, яку ви хочете зупинити. Це не так настільки чітко чи красиво, як, break
але це дозволить виконати роботу. Особисто мені це не подобається, я, певно, переписав би ітерацію іншим способом :) див. 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()) { ... }
У TS це вимагає орієнтації на ES2015, оскільки воно вимагає виконання часу для підтримки ітераторів , а виконання ES5 не виконує. Звичайно, ви можете використовувати щось на зразок Babel, щоб зробити висновок робочим для ES5.
"Old school javascript" на допомогу (для тих, хто не знайомий / любить функціональне програмування)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Ви можете використовувати оператор for..in TypeScript для доступу до індексу при роботі з колекціями.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Вихід:
0: 7
1: 8
2: 9
Див. Демо
for..in
також може дати вам більше, ніж ви очікували, оскільки воно включає всі функції, оголошені також на об'єкті. Наприклад:for (var prop in window.document) { console.log(prop); }