2013-06-15 15 views
10

Object tôi đưa ra tổng đúng groupBy.Food trông giống nhưlàm giảm không

[ 
Object 
amount: "15.0" 
category: Object 
debit: true 
__proto__: Object 
, 
Object 
amount: "10.0" 
category: Object 
debit: true 
__proto__: Object 
, 
Object 
amount: "11.1" 
category: Object 
debit: true 
__proto__: Object 
] 

Tất cả tôi muốn là sum số tiền trong từng đối tượng. Tôi đang sử dụng Lodash reduce như

var s = _.reduce(groupBy.Food, function(s, entry){ 
    return s + parseFloat(entry.amount); 
}); 

Khi tôi nhìn thấy giá trị của s tôi nhận được

s 
"[object Object]1011.1" 

được rằng tôi không làm gì ngay tại đây?

Trả lời

23

Theo mặc định, reduce bắt đầu với hai mục đầu tiên trong danh sách, vì vậy s sẽ là mục đầu tiên trong mảng và entry sẽ là mục thứ hai trong lần đầu tiên hàm của bạn được gọi. Cung cấp cho nó một giá trị để bắt đầu với: (. Array ‘s reduce cư xử theo cùng một cách)

var s = _.reduce(groupBy.Food, function(s, entry) { 
    return s + parseFloat(entry.amount); 
}, 0);

+0

này giải thích nó. Cảm ơn bạn – daydreamer

5

Bạn cũng có thể sử dụng _.sum(array) hoặc _.sumBy(array, [iteratee=_.identity]) để tổng hợp cho cả hai mảng và đối tượng. Xem các ví dụ bên dưới.

_.sum([4, 2, 8, 6]); // ➜ 20 

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 
_.sumBy(objects, function(o) { return o.n; }); // ➜ 20 
_.sumBy(objects, 'n');// ➜ 20 
Các vấn đề liên quan