Chuyển đến nội dung chính
Mô-đun 6 · Bài học 2 trong tổng số 422/32 trong khóa học~12 min
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ý

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc bắt đầu lúc valoreIniziale.
  • Đối với mỗi phần tử, một acc mới được tính toán.
  • Kết quả cuối cùng là acc cuối cùng.

Ví dụ cơ bản: tổng và sản phẩm

JS
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);
// 60

Khô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

JS
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

JS
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ó

tập thể dục#js.m6.l2.e1
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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

tập thể dục#js.m6.l2.e2
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử