You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:55:19