Yanıtlar:
.forEach
zaten bu yeteneğe sahip:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Ama yeteneklerini istiyorsanız for...of
, o zaman yapabilirsiniz map
indeksi ve değere dizi:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Bu biraz uzun, bu yüzden tekrar kullanılabilir bir işleve koymaya yardımcı olabilir:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Yinelenebilir Sürüm
--downlevelIteration
Derleyici seçeneğiyle derlerseniz ES3 veya ES5'i hedeflerken bu işe yarar .
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 +
Eğer ES6 + ortamları hedeflediğinden edebiliyoruz, o zaman kullanabilirsiniz .entries()
belirtildiği gibi yöntem Arnavion cevabı .
Array.some()
ve durdurmak istediğiniz yinelemede false döndürür. Neredeyse o kadar net veya hoş break
değil ama işi halledecekti. Şahsen beğenmedim, muhtemelen yinelemeyi başka bir şekilde yeniden yazardım :) see 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'de bu, ES5'in hedeflenmesini gerektirir, çünkü çalışma zamanının , ES5 çalışma zamanlarının desteklemediği yineleyicileri desteklemesini gerektirir . Elbette çıktıyı ES5 çalışma zamanlarında çalıştırmak için Babel gibi bir şey kullanabilirsiniz .
Kurtarmaya "eski okul javascript" (aşina olmayan / fonksiyonel programlamayı sevenler için)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Koleksiyonlarla uğraşırken dizine erişmek için for..in TypeScript işlecini kullanabilirsiniz.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Çıktı:
0: 7
1: 8
2: 9
Demoya Bakın
for..in
ayrıca bir nesnede bildirilen tüm işlevleri de içerdiğinden beklediğinizden daha fazlasını verebilir. Örneğin:for (var prop in window.document) { console.log(prop); }