首页 > 解决方案 > 如何基于相同的值合并对象数组?

问题描述

我有这个对象数组:

var array = [{
    country: "Austria",
    name: "2019-01-04T23:00:00.000Z",
    value: "1"
  },
  {
    country: "Austria",
    name: "2019-01-11T23:00:00.000Z",
    value: "3"
  },
  {
    country: "Austria",
    name: "2019-01-18T23:00:00.000Z",
    value: "1"
  }
]

我想操纵它来实现这个结果:

var array = [{
  country: "Austria",
  series: [{
      name: "2019-01-04T23:00:00.000Z",
      value: "1"
    },
    {
      name: "2019-01-11T23:00:00.000Z",
      value: "3"
    },
    {
      name: "2019-01-18T23:00:00.000Z",
      value: "1"
    }
  ]
}]

我读了很多问题,但没有一个对我有帮助。

标签: javascriptarrays

解决方案


这应该这样做:

var map = {};

for(var entity of array) {
    if(!map[entity.country]) {
        map[entity.country] = {
            country: entity.country,
            series: [
                {
                    name: entity.name,
                    value: entity.value
                }
            ]
        };
    }
    else {
        map[entity.country].series.push({
            name: entity.name,
            value: entity.value            
        });
    }
}

var mappedArray = Object.values(map);

推荐阅读