Tôi đang cố gắng lọc tất cả các phần tử trong một mảng lớn hơn 10 đến một mảng mới. Tôi cố ý không sử dụng Array.prototype.filter()
vì tôi muốn tìm hiểu phương pháp reduce()
. Dưới đây là đoạn code tôi đã chơi vớiTại sao Array.prototype.reduce() không lấy một mảng trống làm bộ tích lũy?
var collection = [3, 5, 11, 23, 1];
// fileter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.push(collectionElemet);
}
}, []);
Tôi đã mong rằng filteredArr
sẽ được khởi tạo với một mảng trống tại thời điểm thực hiện gọi lại lần đầu tiên khi nó xảy ra với rất nhiều ví dụ được cung cấp here. Nhưng khi tôi chạy mã này, tôi gặp lỗi Cannot read property 'push' of undefined
, tôi đang làm phiền nó ở đâu? Cảm ơn bạn!
Nếu điều kiện là đúng - bạn trả lại một số, nếu không đúng - bạn trả về một 'không xác định'. Nếu bạn chỉ muốn lọc - sử dụng 'Array.prototype.filter', mã hiện tại của bạn vì nó là xấu và gây hiểu nhầm. – zerkms
@zerkms: Đó là công bằng cho mã sản xuất, không phải cho giáo dục/thử nghiệm. OP nói rõ rằng anh ta biết về 'filter', nhưng cố gắng hiểu' reduce'. – Amadan
@Amadan thì đó là một nỗ lực yếu: nó có ý nghĩa để thử các chức năng hiểu biết bằng cách sử dụng usecases chúng được thiết kế cho. – zerkms