一:JS 数组对象根据相同key合并成新的数组对象(将一维数组转为多维数组)

将数组中有相同的key合并为新的数组,其实也就是将一维数组修改为多维数组:

let data = [
  { name: "苹果", orderCode: "AAAAAAAA" },
  { name:
"橘子", orderCode: "BBBBBBBB" },
  { name:
"香蕉", orderCode: "CCCCCCCCC" },   { name: "苹果", orderCode: "DDDDDDDD" },   { name: "橘子", orderCode: "EEEEEEE" },   { name: "苹果", orderCode: "FFFFFFF" }, ];

想要修改为:

const newAr = [
  {
    name: "苹果",
    goodsList: [
          { name: "苹果", orderCode: "AAAAAAAA" },
          { name: "苹果", orderCode: "DDDDDDDD" },
          { name: "苹果", orderCode: "FFFFFFF" },
        ],
      },
  {
    name: "橘子",
    goodsList: [{ name: "橘子", orderCode: "BBBBBBBB" }],
  },
  {
    name: "香蕉",
    goodsList: [{ name: "香蕉", orderCode: "CCCCCCCCC" }],
  },
];

代码:

方法一:

let tempList = [];
    let resultList = [];
    data.map((item) => {
      if (tempList.indexOf(item.name) === -1) {
        tempList.push(item.name);
        resultList.push({
          name: item.name,
          goodsList: [],
        });
      }
    });

    resultList.map((item) => {
      data.map((items) => {
        if (item.name === items.name) {
          item.goodsList.push(items);
        }
      });
});

方法二:

let tempArr = [];
    let afterData = [];
    for (let i = 0; i < data.length; i++) {
      if (tempArr.indexOf(data[i].name) === -1) {
        afterData.push({
          name: data[i].name,
          origin: [data[i]],
        });
        tempArr.push(data[i].name);
      } else {
        for (let j = 0; j < afterData.length; j++) {
          if (afterData[j].name == data[i].name) {
            afterData[j].origin.push(data[i]);
            break;
          }
        }
      }
}
原文地址:https://www.cnblogs.com/liumcb/p/14781079.html