คำตอบ:
.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..
}
เวอร์ชัน Iterable
สิ่งนี้จะทำงานเมื่อกำหนดเป้าหมาย 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 runtimes
"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); }
หรือวิธีแก้ปัญหาโรงเรียนเก่าอื่น:
var someArray = [9, 2, 5];
let i = 0;
for (var item of someArray) {
console.log(item); // 9,2,5
i++;
}