【问题标题】:Merge objects in an array if they have the same date如果它们具有相同的日期,则合并数组中的对象
【发布时间】:2019-03-12 20:47:47
【问题描述】:

我有一个对象数组。如果 2 个或多个对象共享相同的日期,我想将它们合并为一个对象。例如,如果我有这个:

const rawData = [
  {
    date: '3/10/2019',
    a: '123',
  },
  {
    date: '3/10/2019',
    b: '456',
  },
  {
    date: '3/11/2019',
    a: '789',
  },
  {
    date: '3/11/2019',
    b: '012',
  },
  {
    date: '3/11/2019',
    c: '345',
  }
];

然后我希望修改后的数组看起来像这样:

const myDesiredResult = [
  {
    date: '3/10/2019',
    a: '123',
    b: '456',
  },
  {
    date: '3/11/2019',
    a: '789',
    b: '012',
    c: '345',
  }
];

原始对象总是有 2 个项目,日期和其他内容,但与日期配对的内容没有限制。范围可以从 a - c、a-z 等。

只要有一种简洁的方法,我更愿意使用纯 javascript 来执行此操作,但我愿意在必要时使用 lodash。

【问题讨论】:

    标签: javascript arrays ecmascript-6 lodash


    【解决方案1】:

    这是 reduce 的一个很好的用例。

    const rawData = [
      {
        date: '3/10/2019',
        a: '123',
      },
      {
        date: '3/10/2019',
        b: '456',
      },
      {
        date: '3/11/2019',
        a: '789',
      },
      {
        date: '3/11/2019',
        b: '012',
      },
      {
        date: '3/11/2019',
        c: '345',
      }
    ];
    
    const groupByDate = array => array.reduce((results, item) => {
      const current = results.find(i => i.date === item.date);
      if (current) {
        for (let property in item) {
          if (property !== 'date') {
            current[property] = item[property];
          }
        }
      } else {
        results.push({...item});
      }
      return results;
    }, []);
    
    console.log(groupByDate(rawData));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多