Jawaban:
.forEach
sudah memiliki kemampuan ini:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Tetapi jika Anda ingin kemampuan for...of
, maka Anda dapat map
array ke indeks dan nilai:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Itu agak lama, jadi mungkin membantu untuk menempatkannya dalam fungsi yang dapat digunakan kembali:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Versi Iterable
Ini akan berfungsi ketika menargetkan ES3 atau ES5 jika Anda mengkompilasi dengan --downlevelIteration
opsi kompiler.
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 +
Jika Anda dapat menargetkan lingkungan ES6 + maka Anda dapat menggunakan .entries()
metode yang diuraikan dalam jawaban Arnavion .
Array.some()
dan mengembalikan false pada iterasi yang ingin Anda hentikan. Ini tidak sejelas atau seindah break
tapi itu akan menyelesaikan pekerjaan. Secara pribadi saya tidak suka itu, saya mungkin akan menulis ulang iterasi dengan cara lain :) lihat 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()) { ... }
Dalam TS ini membutuhkan penargetan ES2015 karena memerlukan runtime untuk mendukung iterator , yang tidak runtime ES5. Anda tentu saja dapat menggunakan sesuatu seperti Babel untuk membuat output bekerja pada runtime ES5.
"Old school javascript" untuk penyelamatan (bagi mereka yang tidak terbiasa / cinta pemrograman fungsional)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Anda dapat menggunakan for..in Operator naskah untuk mengakses indeks ketika berhadapan dengan koleksi.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Keluaran:
0: 7
1: 8
2: 9
Lihat Demo
for..in
juga dapat memberi Anda lebih dari yang Anda harapkan karena mencakup semua fungsi yang dideklarasikan pada objek juga. Sebagai contoh:for (var prop in window.document) { console.log(prop); }