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

优化对象与数组合并循环代码(支持Lodash实现)

优化合并对象数组的JavaScript代码(基于Lodash)

优化点说明

  1. items合并性能优化:原代码中mergedData.items = [...mergedData.items, ...data.items]每次循环都会创建新数组,大数据量下内存开销大、性能差。改用push(...data.items)直接在原有数组上追加元素,时间复杂度从O(n²)降至O(n)。
  2. 代码简洁性优化:用Lodash的_.reduce和_.mergeWith替代重复的money属性累加逻辑,减少冗余代码。

优化后的实现

private mergeData(dataArray) {
  return _.reduce(dataArray, (acc, curr) => {
    // 累加money对象的所有数值属性
    acc.money = _.mergeWith(acc.money, curr.money, (prev, currVal) => prev + currVal);
    // 高效合并items数组
    acc.items.push(...curr.items);
    return acc;
  }, {
    items: [],
    money: { money1: 0, money2: 0, money3: 0 }
  });
}

另一种逻辑拆分的写法

如果希望代码逻辑拆分更清晰,可以分开处理money和items:

private mergeData(dataArray) {
  // 合并并累加money属性
  const mergedMoney = _.mergeWith(
    { money1: 0, money2: 0, money3: 0 },
    ...dataArray.map(item => item.money),
    (a, b) => a + b
  );

  // 合并items数组(高性能方式)
  const mergedItems = [];
  _.forEach(dataArray, item => mergedItems.push(...item.items));

  return { items: mergedItems, money: mergedMoney };
}

关键细节说明

  • _.mergeWith:通过自定义合并规则,对money对象的每个属性执行累加操作,避免手动逐个属性相加的冗余代码。
  • push(...curr.items):直接在已有数组上追加元素,避免频繁创建新数组,大幅提升大数据量场景下的性能。
  • 若items数组的元素是需要去重的键值对对象,可额外使用_.uniqBy处理,比如mergedItems = _.uniqBy(mergedItems, 'key')(根据实际键名调整)。

内容的提问来源于stack exchange,提问作者adame21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:35:16