首页 > 解决方案 > 按属性查找重复对象并使用 Javascript 或 UnderscoreJS 合并

问题描述

我有一个如下所述的数组:

var somevalue = [{
    code: 1,
    name: 'a1'
  }, {
    code: 2,
    name: 'b1'
  }, {
    code: 1,
    name: 'a2'
  },
  {
    code: 1,
    name: 'a3'
  },
  {
    code: 2,
    name: 'b2'
  }
]

从这个数组中,我想找到重复的元素,code并将相同代码的所有元素合并为一个。所以最终的输出是:

var somevalue = [{
    code: 1,
    name: 'a1, a2'
  }, {
    code: 2,
    name: 'b1, b2, b3'
  }
]

有什么办法可以做到这一点underscoreJS吗?

我可以做到这一点for-loop。但在实际场景中,它非常大的数组包含具有 10 个属性的 JSON 对象。所以我需要一些面向性能的解决方案。

标签: javascriptarraysunderscore.js

解决方案


您可以使用 array.reduce:

var datas = [{
    code: 1,
    name: 'a1'
  }, {
    code: 2,
    name: 'b1'
  }, {
    code: 1,
    name: 'a2'
  },
  {
    code: 1,
    name: 'a3'
  },
  {
    code: 2,
    name: 'b2'
  }
];

datas = datas.reduce((m, o) => {
  const found = m.find(e => e.code === o.code);
  found ? found.name += `, ${o.name}` : m.push(o);
  return m;
}, []);

console.log(datas);


推荐阅读