Bài học theo mô-đun (2/4)
giảm bớt
reduce là phương thức mảng chức năng mạnh mẽ nhất: nó duyệt qua bộ sưu tập
giữ một bộ tích lũy được cập nhật ở mỗi bước. Khi vòng lặp kết thúc, nó trả về
ắc quy.
Chữ ký
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);accbắt đầu lúcvaloreIniziale.- Đối với mỗi phần tử, một
accmới được tính toán. - Kết quả cuối cùng là
acccuối cùng.
Ví dụ cơ bản: tổng và sản phẩm
const numeri = [3, 1, 4, 1, 5];
const somma = numeri.reduce((a, n) => a + n, 0);
// 14
const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60Không có giá trị ban đầu, reduce bắt đầu từ phần tử đầu tiên (rủi ro khi có khả năng trống
mảng → lỗi). Luôn chuyển giá trị ban đầu khi bạn có thể.
Xây dựng một đối tượng: đếm
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];
const conteggio = parole.reduce((acc, p) => {
acc[p] = (acc[p] ?? 0) + 1;
return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }Tìm tối đa/phút
const nums = [3, 7, 1, 9, 4];
const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9(Trong thực tế, tối đa/phút thích Math.max(...nums); đây là ví dụ mô phạm.)
Hãy thử nó
Xác định `tổng(mục)`: bạn nhận được một mảng đối tượng { giá, số lượng } và trả về tổng chi tiêu (tổng giá*số lượng). Sử dụng giảm.
Hiển thị gợi ý
giảm((a, it) => a + it.price * it.quantity, 0)
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Xác định `count(words)`: cho một mảng các chuỗi, trả về một đối tượng ánh xạ mỗi chuỗi theo số lần xuất hiện. Sử dụng giảm với bộ tích lũy đối tượng.
Hiển thị gợi ý
acc[p] = (acc[p] ?? 0) + 1; trả lại acc;
Giải pháp khả dụng sau 3 lần thử