我有一组对象。我不想渲染重复数组,但我希望将其与之合并的项目合并,如下所示。
原始数组
array = [
{
name: 'Test',
items: [
{
id: 1,
product_name: "Kbana 1",
},
{
id: 2,
product_name: "Kbana 2",
},
]
},
{
name: 'Test 2',
items: [
{
id: 3,
product_name: "Kbana 3",
},
{
id: 4,
product_name: "Kbana 4",
},
]
},
{
name: 'Test 2',
items: [
{
id: 5,
product_name: "Kbana 5",
},
{
id: 6,
product_name: "Kbana 6",
},
]
},
]
现在我有两个相同的数组对象,它们的索引分别为1和2。现在我想将索引2的项值与索引1合并。
array = [
{
name: 'Test',
items: [
{
id: 1,
product_name: "Kbana 1",
},
{
id: 2,
product_name: "Kbana 2",
},
]
},
{
name: 'Test 2',
items: [
{
id: 3,
product_name: "Kbana 3",
},
{
id: 4,
product_name: "Kbana 4",
},
{
id: 5,
product_name: "Kbana 5",
},
{
id: 6,
product_name: "Kbana 6",
},
]
}
]
答案 0 :(得分:2)
您可以使用Array.reduce按名称对数组元素进行分组。
我们首先使用element.name作为键来创建对象图,然后使用Object.values将其返回为数组。
array = [ { name: 'Test', items: [ { id: 1, product_name: "Kbana 1", }, { id: 2, product_name: "Kbana 2", }, ] }, { name: 'Test 2', items: [ { id: 3, product_name: "Kbana 3", }, { id: 4, product_name: "Kbana 4", }, ] }, { name: 'Test 2', items: [ { id: 5, product_name: "Kbana 5", }, { id: 6, product_name: "Kbana 6", }, ] }, ]
// Use array.reduce and map to organise by name.
let result = Object.values(array.reduce((map, val) => {
if (!map[val.name]) {
map[val.name] = { name: val.name, items: [] };
}
map[val.name].items = map[val.name].items.concat(val.items);
return map;
}, {}))
console.log("Result:", result);
答案 1 :(得分:1)
var arr = [
{
name: 'Test',
items: [
{
id: 1,
product_name: "Kbana 1",
},
{
id: 2,
product_name: "Kbana 2",
},
]
},
{
name: 'Test 2',
items: [
{
id: 3,
product_name: "Kbana 3",
},
{
id: 4,
product_name: "Kbana 4",
},
]
},
{
name: 'Test 2',
items: [
{
id: 5,
product_name: "Kbana 5",
},
{
id: 6,
product_name: "Kbana 6",
},
]
},
]
const newArr = [];
for(var i = 0;i<arr.length;i++)
{
var name = arr[i].name;
for(var j = 0;j<arr.length;j++)
{
if(i != j)
{
if(name === arr[j].name)
{
arr[i].items = [...arr[i].items, ...arr[j].items]
arr[j].name = "remove";
}
}
}
}
arr = arr.filter(data => data.name !== "remove");
console.log(arr);