Javascript合并并组合具有相同ID的对象

问题描述 投票:-7回答:2

我一直在尝试合并数据并获得此结果:

data = [{serviceID: 22, quantite: 120, typeConviveId: 6},
       {serviceID: 23, quantite: 240, typeConviveId: 6},
        {serviceID: 24, quantite: 100, typeConviveId: 7},
        {serviceID: 25, quantite: 150, typeConviveId: 7}]  

最后需要什么:

result: [ { "22": "120", "23": "240", "typeConviveId": "6"},
        { "24": "100", "25": "150", "typeConviveId": "7" } ] 
javascript merge
2个回答
0
投票

你可以使用Array.prototype.mapArray.prototype.filterArray.prototype.reduce的组合,以及使用typeConviveIdSet重复使用的唯一[...new Set(data.map(x=>x.typeConviveId))]列表:

const data = [{serviceID: 22, quantite: 120, typeConviveId: 6}, {serviceID: 23, quantite: 240, typeConviveId: 6}, {serviceID: 24, quantite: 100, typeConviveId: 7}, {serviceID: 25, quantite: 150, typeConviveId: 7}];

const result = [...new Set(data.map(x => x.typeConviveId))].map(
  id => data
  .filter(x => x.typeConviveId === id)
  .reduce((acc, val) => {
    return { ...acc,
      [val.serviceID]: '' + val.quantite
    }
  }, {
    typeConviveId: '' + id
  })
);

console.log(result);

0
投票

您可以使用数组reduce&在回调函数中使用findIndex来获取具有相同typeConviveId的对象。 findIndex将从findIndex表示的累加器数组返回具有相同acc的对象的索引。在fiindIndex中为-1然后使用所需的键创建一个新对象并将其推入累加器数组。如果已存在具有相同typeConviveId的数组,则只需使用新密钥更新对象

let data = [{
    serviceID: 22,
    quantite: 120,
    typeConviveId: 6
  },
  {
    serviceID: 23,
    quantite: 240,
    typeConviveId: 6
  },
  {
    serviceID: 24,
    quantite: 100,
    typeConviveId: 7
  },
  {
    serviceID: 25,
    quantite: 150,
    typeConviveId: 7
  },
  {
    serviceID: 25,
    quantite: 250,
    typeConviveId: 7
  }
]


let newData = data.reduce(function(acc, curr) {
  let findIndex = acc.findIndex(function(item) {
    return item.typeConviveId === curr.typeConviveId;
  })
  if (findIndex === -1) {
    acc.push({
      typeConviveId: curr.typeConviveId,
      [curr.serviceID]: curr.quantite

    })

  } else {
    acc[findIndex][curr.serviceID] = curr.quantite

  }



  return acc;


}, []);

console.log(newData)

预期的结果有问题。如果存在重复键,例如假设像22这样的键重复,那么它将具有最后一个值。

{
        serviceID: 25,
        quantite: 150,
        typeConviveId: 7
      },
      {
        serviceID: 25,
        quantite: 250,
        typeConviveId: 7
      }

在这种情况下,两个对象中的serviceID都是25,所以它的值将是250.它不会有两个具有单独值的键

© www.soinside.com 2019 - 2024. All rights reserved.