按属性查找重复对象,使用Javascript或UnderscoreJS查找合并

时间:2018-05-25 12:14:12

标签: javascript arrays underscore.js

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

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对象。所以我需要一些面向性能的解决方案

1 个答案:

答案 0 :(得分:2)

您可以使用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);