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

如何用JavaScript或UnderscoreJS按属性查找并合并重复对象?

使用UnderscoreJS高效合并重复code的数组元素

当然可以用UnderscoreJS实现这个需求,而且它的内置方法都是经过性能优化的,非常适合你说的包含10个属性的大型JSON数组场景,比手写for循环更简洁易维护,性能也有保障。

实现思路

核心就是两步:

  • 先用_.groupBy把数组按code属性分组,把相同code的元素归到同一组里
  • 再用_.map遍历分组后的结果,将每个组里的name属性合并,同时保留其他属性(比如你的场景里的10个属性,只需要调整合并的逻辑即可)

完整代码示例

// 你的原始数组
var somevalue = [{ code: 1, name: 'a1' }, { code: 2, name: 'b1' }, { code: 1, name: 'a2' }, { code: 1, name: 'a3' }, { code: 2, name: 'b2' } ];

// 使用UnderscoreJS处理
var mergedResult = _.map(_.groupBy(somevalue, 'code'), function(group, code) {
  return {
    code: parseInt(code, 10), // 把键转成数字类型,和原始数组类型保持一致
    name: _.pluck(group, 'name').join(', ')
    // 如果还有其他10个属性,这里可以按需处理:
    // 若属性在组内值一致,直接取 group[0].attrName
    // 若需要合并,就用 _.pluck(group, 'attrName').join('分隔符')
    // 示例:attr1: group[0].attr1, attr2: _.pluck(group, 'attr2').join('; ')
  };
});

console.log(mergedResult);
// 输出结果:
// [{ code: 1, name: 'a1, a2, a3' }, { code: 2, name: 'b1, b2' } ]

性能说明

Underscore的_.groupBy和_.map都是底层优化过的方法,整个过程只需要两次遍历(一次分组、一次转换),比很多手写嵌套查找的for循环性能更稳定。对于大型数组来说,这种方式既保证了代码可读性,又不会牺牲性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:43:58