Skip to content

JS合并数组对象中key值相同的数据

将数组里某个属性相同的对象合并到一个数组中

原数组示例:

javascript
  let oldData = [
    {
      type:"篮球",
      value:20
    },
    {
      type:"跑步",
      value:40
    },
    {
      type:"游泳",
      value:10
    }
    {
      type:"跑步",
      value:15
    }
  ]

希望获得的数据格式(即将相同”type“值的对象合并为一个新的数组)
javascript
let resultData = [
  {
    type: "篮球",
    infoList: [
      {
        type: "篮球",
        value: 20,
      },
    ],
  },
  {
    type: "跑步",
    infoList: [
      {
        type: "跑步",
        value: 40,
      },
      {
        type: "跑步",
        value: 15,
      },
    ],
  },
  {
    type: "游泳",
    infoList: [
      {
        type: "游泳",
        value: 10,
      },
    ],
  },
];

实现方案

方法一

javascript
let tempArr = [];
let data = [];
for (let i = 0; i < oldData.length; i++) {
  if (tempArr.indexOf(oldData[i].type) === -1) {
    data.push({
      type: oldData[i].type,
      infoList: [oldData[i]],
    });
    tempArr.push(oldData[i].type);
  } else {
    for (let j = 0; j < data.length; j++) {
      if (data[j].type == oldData[i].type) {
        data[j].infoList.push(oldData[i]);
        break;
      }
    }
  }
}

方法二

javascript
let infoList = {};
oldData.forEach((item, index) => {
  let { type } = item;
  if (!infoList[type]) {
    infoList[type] = {
      type,
      list: [],
    };
  }
  infoList[type].list.push(item);
});

let list = Object.values(infoList); // 转换后的数据