以下是我目前拥有的数组格式
<块引用>有多个这样的类别,这是提供的一个例子
[
{
"itemId":"123",
"itemName":"name 1",
"category":"electric",
"salePersonName":"person name 1"
},
{
"itemId":"234",
"itemName":"name 2",
"category":"electric",
"salePersonName":"person name 2"
}{
"itemId":"345",
"itemName":"name 3",
"category":"electric",
"salePersonName":"person name 3"
}
]
但是我需要将其重组为以下格式,我该如何以动态方式执行此操作,
[
{
"category":"electric",
"items":[
{
"temId":"123",
"itemName":"name 1"
},
{
"itemId":"234",
"itemName":"name 2"
},
{
"itemId":"345",
"itemName":"name 3"
}
],
"salePersons":[
{
"salePersonName":"person name 1"
},
{
"salePersonName":"person name 2"
},
{
"salePersonName":"person name 3"
}
]
}
]
<块引用>
下面是我之前尝试过的代码,但没有给出预期的输出
const array = [{
"itemId": "123",
"itemName": "name 1",
"category": "electric",
"salePersonName": "person name 1"
},
{
"itemId": "234",
"itemName": "name 2",
"category": "electric",
"salePersonName": "person name 2"
}, {
"itemId": "345",
"itemName": "name 3",
"category": "electric",
"salePersonName": "person name 3"
},
{
"itemId": "34111",
"itemName": "name 4",
"category": "newCategory",
"salePersonName": "person name 5"
}
];
let result = {};
array.forEach(function(o) {
result[o.category] = result[o.category] || {};
result[o.category]['items'] = [{
"itemId": result[o.itemId],
"itemName": result[o.itemName]
}];
result[o.category]['salePersons'] = [{
"salePersonName": result[o.salePersonName]
}];
});
console.log("result", result)
答案 0 :(得分:1)
const input = [
{
"itemId":"123",
"itemName":"name 1",
"category":"electric",
"salePersonName":"person name 1"
},
{
"itemId":"234",
"itemName":"name 2",
"category":"electric",
"salePersonName":"person name 2"
},{
"itemId":"345",
"itemName":"name 3",
"category":"electric",
"salePersonName":"person name 3"
}
]
const temp = input.reduce((acc, {itemId, itemName, category, salePersonName}) => {
const entry = (acc[category] ??= {items: [], salePersons:[]})
entry.items.push({ itemId, itemName });
entry.salePersons.push({ salePersonName });
return acc;
},{})
const result = Object.entries(temp).map(([category, data]) => ({ category, ...data }))
console.log(result);
答案 1 :(得分:0)
下面的代码应该适合你。
let result = {};
arr.forEach(function(o) {
result[o.category] = result[o.category] || {};
result[o.category]['items'] = result[o.category]['items'] || [];
result[o.category]['items'].push({
"itemId": o.itemId,
"itemName": o.itemName
});
result[o.category]['salePersons'] = result[o.category]['salePersons'] || [];
result[o.category]['salePersons'].push({
"salePersonName": o.salePersonName
});
});
console.log("result", result);
答案 2 :(得分:0)
伙计们无效的分配在有点旧的打字稿版本中不起作用,所以我稍微修改了代码。在这里。
const input = [{
"itemId": "123",
"itemName": "name 1",
"category": "electric",
"salePersonName": "person name 1"
},
{
"itemId": "234",
"itemName": "name 2",
"category": "electric",
"salePersonName": "person name 2"
}, {
"itemId": "345",
"itemName": "name 3",
"category": "electric",
"salePersonName": "person name 3"
},
{
"itemId": "456",
"itemName": "name 5",
"category": "Toys",
"salePersonName": "person name 3"
}
]
const temp = input.reduce((acc, {
itemId,
itemName,
category,
salePersonName
}) => {
let entry;
if (acc[category] != null || acc[category] != undefined) {
entry = acc[category]
} else {
entry = acc[category] = {
items: [],
salePersons: []
}
}
entry.items.push({
itemId,
itemName
});
entry.salePersons.push({
salePersonName
});
return acc;
}, {})
const result = Object.entries(temp).map(([category, data]) => ({
category,
...data
}))
console.log(result);