lodash 有没有办法合并一组对象?

问题描述

我一直坚持在 JavaScript 中合并一组对象。我想使用 JS 库或 lodash 将它们合并为一个对象。

我的数组就像

[{
    2017: {
      a: "100",b: "200"
    },2018: {
      a: "101",b: "202"
    },...
  },{
    2017: {
      a: "300",b: "400"
    },2018: {
      a: "303",b: "404"
    },...
]

我希望我的结果是这样的:

[{
  2017: {
    a: "400",b: "600"
  },2018: {
    a: "404",b: "606"
  },...
}]

这里有一个简单的方法来实现这个吗?在此处输入代码

解决方法

像这样:

let res = [
    {
        2017: {
            a: "100",b: "200",},2018: {
            a: "101",b: "202",{
        2017: {
            a: "300",b: "400",2018: {
            a: "303",b: "404",].reduce((acc,el) => {
    Object.keys(el).forEach(year => {
        if(acc[year]){
            acc[year]["a"] += parseInt(el[year]['a']) 
            acc[year]["b"] += parseInt(el[year]['b']) 
        } else {
            acc[year] = {
                a: parseInt(el[year]['a']),b: parseInt(el[year]['b']) 
            }
        }
    })
    return acc;
},{});

console.log(res)

Object.keys 仅当数组中的对象可能有不同的年份时才需要,但如果这些年份始终是 2017 年和 2018 年,则可以将其删除