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:
- 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)
- currentValue: Phần tử hiện tại đang được xử lý trong mảng
- currentIndex: (không bắt buộc) Chỉ số của phần tử hiện tại
- mảng: (không bắt buộc) Mảng mà bạn gọi reduce() trên đó
- 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); // 15Cá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: 10Thử 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:
- Tính tổng giá của tất cả mặt hàng
- Áp dụng giảm giá: Nếu tổng tiền lớn hơn 100, giảm giá 10%
- 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%
- 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ảmfinalTotal: 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
};
}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
4JSON phần 2
Duyệt qua JSONJSON lồng nhauOptional chaining trong JSONSao chép nông và sâuÔn tập: Cửa hàng xe đạpÔn tập: Hệ Mặt Trời7Hệ thống quản lý thư viện
Tổng quan dự ánThêm sách10Quản lý hệ thống lễ hội
Tổng quan dự ánThêm phim và địa điểm2Mảng nhiều chiều
Kiến thức cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập về mảng 2 chiềuPhép cộng và phép trừ ma trậnMảng không đềuMảng 3 chiều và hơn nữaCác mẫu thường gặp với mảng 2 chiềuÔn tập về mảng3JSON phần 1
JSON là gì?Kiểm tra khóa có tồn tạiPhương thức của đối tượngToán tử spread phần 1Toán tử spread phần 2Xóa khóaÔn tập: thao tác với khóa trong JSONTự luyện tập: Trình biên dịch JavaScript online