如何用Underscore.js计算对象数组中同类项的总和?
解决方案
你可以利用Underscore.js的_.reduce结合_.each,或者更简洁的_.mergeWith来实现同类物品的数值汇总,完全不需要for/while循环:
方法一:使用_.reduce + _.each
function weeklyGroceries(groceryWeeks) { // 用reduce遍历每周记录,初始汇总对象为空 return _.reduce(groceryWeeks, (totalSummary, weeklyItems) => { // 遍历当周的每个物品和数量 _.each(weeklyItems, (quantity, itemName) => { // 累加数量:如果汇总对象已有该物品,就加当前数量;否则从0开始加 totalSummary[itemName] = (totalSummary[itemName] || 0) + quantity; }); return totalSummary; }, {}); }
方法二:使用_.mergeWith(更简洁)
_.mergeWith支持自定义合并规则,适合直接合并多个对象并处理相同键的数值求和:
function weeklyGroceries(groceryWeeks) { // 合并所有周的对象,相同键时执行相加逻辑 return _.mergeWith({}, ...groceryWeeks, (existingValue, newValue) => { return (existingValue || 0) + newValue; }); }
为什么你的尝试没生效?
你之前的代码只收集了所有数值到数组里,丢失了物品名称和数量的对应关系,所以无法还原成键值对形式的汇总结果。上面的两种方法都保留了物品名称作为键,同时维护对应的累加数值,完美匹配需求。
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

