将对象数组转换为具有唯一id-s的对象数组和名称数组



如何将这个项目数组转换为结果数组(对象应该具有唯一id,并具有键'names'与具有相同id的对象的名称属性数组):

原始数组:

const items = [
{id: 1, name: 'a'}, 
{id: 2, name: 'b'}, 
{id: 3, name: 'c'}, 
{id: 1, name: 'd'}, 
{id: 3, name: 'f'}
];

转换数组:

const result = [
{id: 1, names: ['a', 'd']}, 
{id: 2, names ['b']}, 
{id: 3, names: ['c', 'f']}
];

您可以使用Array.reduce来获得结果。

const inputArray = [
{id: 1, name: 'a'}, 
{id: 2, name: 'b'}, 
{id: 3, name: 'c'}, 
{id: 1, name: 'd'}, 
{id: 3, name: 'f'}
];
const result = inputArray.reduce((acc, item) => {
const exist = acc.find(e => e.id == item.id);
// check exist in result
if (exist) {
// exist: push 'name' value to 'names' array
exist['names'].push(item.name);
} else {
// not exist: create new item in result
acc.push({
'id': item.id,
'names': [item.name]
});
}

return acc;
}, []);
console.log(result);

最新更新