Menu
CoddyTech

Phương thức Reduce

Thuộc phần Logic và luồng chương trình trong hành trình JavaScript của Coddy. Bài học 54 trên 65.

Phương thức reduce() cho phép bạn “rút gọn” một mảng thành một giá trị duy nhất bằng cách chạy một hàm đã cho với từng phần tử trong mảng. Giá trị duy nhất này có thể là số, chuỗi, đối tượng hoặc thậm chí là một mảng khác.

Đây là cú pháp của hàm giảm:

array.reduce(function(accumulator, currentValue, currentIndex, array) {
    // Trả về giá trị accumulator đã cập nhật
}, initialValue);

Thành phần chính:

  1. accumulator: Tích lũy các giá trị trả về của hàm callback (có thể xem đây là tổng đang được tính)
  1. currentValue: Phần tử hiện tại đang được xử lý trong mảng
  1. currentIndex: (không bắt buộc) Chỉ số của phần tử hiện tại
  1. mảng: (không bắt buộc) Mảng mà bạn gọi reduce() trên đó
  1. initialValue: (không bắt buộc) Giá trị dùng làm đối số đầu tiên cho lần gọi đầu tiên của hàm callback (callback function)

Ví dụ: tổng các số:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15

Cách hoạt động từng bước:

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
    console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
    return acc + curr;
}, 0);

// Đầu ra:
// Giá trị tích lũy: 0, giá trị hiện tại: 1
// Giá trị tích lũy: 1, giá trị hiện tại: 2
// Giá trị tích lũy: 3, giá trị hiện tại: 3
// Giá trị tích lũy: 6, giá trị hiện tại: 4
// Kết quả cuối cùng: 10
challenge icon

Thử thách

Dễ

Tạo một hàm có tên calculateGroceryTotal, nhận một mảng các đối tượng đại diện cho mặt hàng tạp hóa.

Mỗi đối tượng có hai thuộc tính:

  • name: chuỗi (tên mặt hàng)
  • price: số (giá của mặt hàng)

Hàm cần:

  1. Tính tổng giá của tất cả mặt hàng
  2. Áp dụng giảm giá: Nếu tổng tiền lớn hơn 100, giảm giá 10%
  3. Nếu tổng tiền lớn hơn 50 nhưng nhỏ hơn hoặc bằng 100, giảm giá 5%
  4. Không giảm giá nếu tổng tiền từ 50 trở xuống.

Trả về một đối tượng gồm:

  • originalTotal: tổng tiền trước khi giảm giá
  • discount: số tiền được giảm
  • finalTotal: tổng tiền cuối cùng sau khi giảm giá

Tự làm thử

function calculateGroceryTotal(items) {
    // Viết code ở đây
    


    return {
        originalTotal: Math.round(originalTotal * 100) / 100,  // Làm tròn đến 2 chữ số thập phân
        discount: Math.round(discount * 100) / 100,
        finalTotal: Math.round(finalTotal * 100) / 100
    };
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch JavaScript online