Iterator.prototype.reduce()
Baseline
2025
Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Phương thức reduce() của các thực thể Iterator tương tự như Array.prototype.reduce: nó thực thi hàm "reducer" do người dùng cung cấp trên mỗi phần tử do iterator tạo ra, truyền vào giá trị trả về từ phép tính trên phần tử trước. Kết quả cuối cùng của việc chạy reducer qua tất cả các phần tử là một giá trị duy nhất.
Cú pháp
reduce(callbackFn)
reduce(callbackFn, initialValue)
Tham số
callbackFn-
Hàm thực thi cho mỗi phần tử do iterator tạo ra. Giá trị trả về của nó trở thành giá trị của tham số
accumulatortrong lần gọi tiếp theo củacallbackFn. Với lần gọi cuối cùng, giá trị trả về trở thành giá trị trả về củareduce(). Hàm được gọi với các đối số sau:accumulator-
Giá trị từ lần gọi trước của
callbackFn. Trong lần gọi đầu tiên, giá trị của nó làinitialValuenếu cái sau được chỉ định; ngược lại giá trị của nó là phần tử đầu tiên của iterator. currentValue-
Giá trị của phần tử hiện tại. Trong lần gọi đầu tiên, giá trị của nó là phần tử đầu tiên của iterator nếu
initialValueđược chỉ định; ngược lại giá trị của nó là phần tử thứ hai. currentIndex-
Vị trí chỉ số của
currentValue. Trong lần gọi đầu tiên, giá trị của nó là0nếuinitialValueđược chỉ định, ngược lại là1.
initialValueOptional-
Một giá trị mà
accumulatorđược khởi tạo lần đầu tiên callback được gọi. NếuinitialValueđược chỉ định,callbackFnbắt đầu thực thi với phần tử đầu tiên làcurrentValue. NếuinitialValuekhông được chỉ định,accumulatorđược khởi tạo với phần tử đầu tiên vàcallbackFnbắt đầu thực thi với phần tử thứ hai làcurrentValue. Trong trường hợp này, nếu iterator rỗng (không có giá trị đầu tiên để trả về làmaccumulator), một lỗi sẽ được ném ra.
Giá trị trả về
Giá trị kết quả từ việc chạy hàm callback "reducer" đến hoàn thành trên toàn bộ iterator.
Ngoại lệ
TypeError-
Được ném ra nếu iterator không chứa phần tử nào và
initialValuekhông được cung cấp.
Mô tả
Xem Array.prototype.reduce() để biết chi tiết về cách reduce() hoạt động. Không giống hầu hết các phương thức iterator helper khác, nó không hoạt động tốt với các iterator vô hạn vì nó không lười biếng.
Ví dụ
>Sử dụng reduce()
Ví dụ sau tạo một iterator yield các số hạng trong dãy Fibonacci, rồi tính tổng mười số hạng đầu tiên:
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
console.log(
fibonacci()
.take(10)
.reduce((a, b) => a + b),
); // 143
Đặc điểm kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-iterator.prototype.reduce> |