我想将具有相同名称的对象合并到一个项目数组中,但我不知道该怎么做。
我有一个像这样的数组:
[
{ name: 'core/core.js',
item: [ [Object] ] },
{ name: 'users/admin.js',
item: [ [Object] ] },
{ name: 'users/admin.js',
item: [ [Object] ] }
]
我想拥有类似的东西:
[
{ name: 'core/core.js',
item: [ [Object] ] },
{ name: 'users/admin.js',
item: [
[ [Object] ],
[ [Object] ]
]
},
]
这是我的代码:
const pathFile = [
{ name: 'core/core.js', item: [{ name: 'core' }] },
{ name: 'users/admin.js', item: [{ name: 'admin1' }] },
{ name: 'users/admin.js', item: [{ name: 'admin2' }] },
];
const obj = pathFile.reduce((a, name) => {
if (!a[name]) {
a[name] = { name, files: [] };
}
a[name].files.push({ name });
return a;
}, {});
const arr = Object.values(obj);
console.log(JSON.stringify(arr));
答案 0 :(得分:0)
您的问题是reduce()
循环中的键使用了错误的值。在您的代码中,name
指向reduce
内的整个对象,因此您需要使用name.name
作为键,因为在reduce中调用的每个项name
循环具有name
属性。最好使用其他参数名称,例如curr
,这样更清楚。
const pathFile = [{ name: 'core/core.js', item: [{ name: 'core' }] },{ name: 'users/admin.js', item: [{ name: 'admin1' }] },{ name: 'users/admin.js', item: [{ name: 'admin2' }] },];
const obj = pathFile.reduce((a, curr) => {
if (!a[curr.name]) a[curr.name] = curr
else a[curr.name].item.push(...curr.item);
return a;
}, {});
const arr = Object.values(obj);
console.log(arr)