Câu trả lời:
.forEach
đã có khả năng này:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Nhưng nếu bạn muốn các khả năng của for...of
, thì bạn có thể map
mảng đến chỉ mục và giá trị:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Điều đó hơi dài, vì vậy có thể giúp đưa nó vào một chức năng có thể sử dụng lại:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Phiên bản lặp lại
Điều này sẽ hoạt động khi nhắm mục tiêu ES3 hoặc ES5 nếu bạn biên dịch với --downlevelIteration
tùy chọn trình biên dịch.
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 +
Nếu bạn có thể nhắm mục tiêu môi trường ES6 + thì bạn có thể sử dụng .entries()
phương pháp như được nêu trong câu trả lời của Arnavion .
Array.some()
và trả về false ở lần lặp bạn muốn dừng. Nó gần như không rõ ràng hoặc đẹp như một break
nhưng nó sẽ hoàn thành công việc. Cá nhân tôi không thích nó, có lẽ tôi sẽ viết lại phép lặp theo một cách khác :) xem 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()) { ... }
Trong TS, điều này yêu cầu nhắm mục tiêu ES2015 vì nó yêu cầu thời gian chạy để hỗ trợ các trình vòng lặp , điều mà các thời gian chạy ES5 không có. Tất nhiên bạn có thể sử dụng một cái gì đó như Babel để làm cho đầu ra hoạt động trên thời gian chạy ES5.
"Javascript trường học cũ" để giải cứu (cho những người không quen thuộc / yêu thích lập trình chức năng)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Bạn có thể sử dụng toán tử TypeScript trong for..in để truy cập chỉ mục khi xử lý các bộ sưu tập.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Đầu ra:
0: 7
1: 8
2: 9
Xem bản demo
for..in
cũng có thể cung cấp cho bạn nhiều hơn bạn mong đợi vì nó cũng bao gồm tất cả các hàm được khai báo trên một đối tượng. Ví dụ:for (var prop in window.document) { console.log(prop); }