Cả ba là method thuần (không sửa mảng gốc), trả về giá trị mới, hợp phong cách khai báo:
map: biến đổi từng phần tử, trả mảng cùng độ dài.[1,2,3].map(x => x * 2)→[2,4,6].filter: giữ phần tử thỏa điều kiện, trả mảng ngắn hơn hoặc bằng.[1,2,3,4].filter(x => x % 2 === 0)→[2,4].reduce: gộp cả mảng về một giá trị (số, object, thậm chí mảng) qua accumulator.[1,2,3].reduce((acc, x) => acc + x, 0)→6.
Ghi nhớ:
- map/filter thực chất viết được bằng reduce — reduce tổng quát nhất.
- Luôn truyền giá trị khởi tạo cho reduce để tránh lỗi trên mảng rỗng.
- map khác forEach: map trả mảng mới, forEach chỉ chạy side effect và trả undefined.