2013-06-15 9 views
10

मेरे वस्तु न जताए groupBy.Food लग रहा हैकम सही राशि

तरह
[ 
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 
] 

सभी मैं चाहता हूँ प्रत्येक वस्तु में राशि का sum है। मैं

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

रूप Lodash reduce उपयोग कर रहा हूँ जब मैं s का मान देख मैं

s 
"[object Object]1011.1" 

क्या है कि मैं यहीं नहीं कर रहा हूँ है?

उत्तर

23

डिफ़ॉल्ट रूप से, reduce सूची में पहले दो आइटम के साथ बाहर शुरू होता है, तो s सरणी में पहला आइटम हो जाएगा और entry दूसरे मद पहली बार अपने कार्य कहा जाता है हो जाएगा। इसे शुरू करने के साथ एक मूल्य दें: (। Array के reduce उसी तरह बर्ताव करता है)

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

+0

यह बताता है। धन्यवाद @minitech – daydreamer

5

तुम भी दोनों सरणी और वस्तु के लिए संक्षेप के लिए _.sum(array) या _.sumBy(array, [iteratee=_.identity]) उपयोग कर सकते हैं। उदाहरण नीचे देखें।

_.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 
संबंधित मुद्दे