我的 JSON 数组有问题。我认为它嵌套的第一个分组是按_id分组,第二个是按itemId分组,我不知道如何解决它,请帮助我
let data=[
{
"_id" : "013",
"items" : [
{
"itemId" : "4",
"stockIn" : 50,
"stockOut" : 0
},
{
"itemId" : "9",
"stockIn" : 100,
"stockOut" : 0
}
]
},
{
"_id" : "013",
"items" : [
{
"itemId" : "3",
"noFreeQtyCount" : 20,
"freeQtyCount" : 0
},
{
"itemId" : "9",
"noFreeQtyCount" : 30,
"freeQtyCount" : 0
}
]
}
]
这是我想要的数据
[
{
"_id" : "013",
"items" : [
{
"itemId" : "3",
"noFreeQtyCount" : 20,
"freeQtyCount" : 0
},
{
"itemId" : "4",
"stockIn" : 50,
"stockOut" : 0
},
{
"itemId" : "9",
"stockIn" : 100,
"stockOut" : 0
"noFreeQtyCount" : 30,
"freeQtyCount" : 0
}
]
},
]
这是我的脚本,请帮忙
const groupBy = data.reduce((acc, cur) => {
acc[cur._id] ? acc[cur._id].items = [...acc[cur._id].items, ...cur.items] : acc[cur._id] = cur;
return acc;
}, {});
const 输出 = groupBy; 打印(输出);
您可以使用
Object.key()
、Array.prototype.map()
和 Object.assign()
完成您需要的分组。
参考以下代码:
const data = [
{
"_id": "013",
"items": [
{"itemId": "4", "stockIn": 50, "stockOut": 0},
{"itemId": "9", "stockIn": 100, "stockOut": 0},
],
},
{
"_id": "013",
"items": [
{"itemId": "3", "noFreeQtyCount": 20, "freeQtyCount": 0},
{"itemId": "9", "noFreeQtyCount": 30, "freeQtyCount": 0},
],
},
];
const mergedData = {};
data.forEach(entry => {
const _id = entry["_id"];
const items = entry["items"];
if (!mergedData[_id]) {
mergedData[_id] = {};
}
items.forEach(item => {
const itemId = item["itemId"];
if (!mergedData[_id][itemId]) {
mergedData[_id][itemId] = {};
}
Object.assign(mergedData[_id][itemId], item);
});
});
const result = Object.keys(mergedData).map(_id => {
return {"_id": _id, "items": Object.values(mergedData[_id])};
});
console.log(result);