我一直在尝试合并数据并获得此结果:
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" } ]
你可以使用Array.prototype.map
,Array.prototype.filter
和Array.prototype.reduce
的组合,以及使用typeConviveId
和Set
重复使用的唯一[...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);
您可以使用数组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.它不会有两个具有单独值的键