如何在javascript中将具有相同键的对象组合到数组中?

时间:2018-11-04 07:50:24

标签: javascript

我有一个对象数组,我想根据javascript中的common date属性减少对象的数量

示例输入:

const data = [
    {date:"1 Nov", foo: 123},
    {date:"1 Nov", bar: 456},
    {date:"2 Nov", foo: 234}, 
    {date:"2 Nov", bar: 567}
];

预期产量

const data = [
    {date:"1 Nov", foo: 123, bar: 456},
    {date:"2 Nov", foo: 234, bar: 567}, 
];

2 个答案:

答案 0 :(得分:0)

也许您可以使用Array#reduce method来实现这一点,因为预期的输出是输入数组的集合。应用此方法的一种方法可能是;

  1. 对于输入数组的每次迭代,请检查当前输出数组的结果(即如下所示的result),以了解日期与当前item匹配的所有项目
  2. 如果找到匹配项,则将找到的对象与匹配的“日期”“传播”到现有对象中(即将两个对象的键/值组合到一个新的对象中),并将其分配回{{ 1}}数组
  3. 否则,如果找不到匹配项,只需按原样将当前项添加到结果数组中

以下代码显示了此描述-希望对您有所帮助!

result

答案 1 :(得分:0)

还有另一种使用lodash的方法。我想将其包括在内。

const data = [
  {date:"1 Nov", foo: 123},
  {date:"1 Nov", bar: 456},
  {date:"2 Nov", foo: 234}, 
  {date:"2 Nov", bar: 567}
];

const result = _.map(
  _.groupBy(data, 'date'), 
  (d) => 
    _.reduce(
      d,
      (result, value) => Object.assign(result, value),
      {}
    )
)

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>