I want to remove duplicate object from array after grouping duplicate object id from matched(already existing) object id. Whatever i have tried that’s grouping ID’s but not getting how to remove duplicate object from array.
Original Array
[
{id:2,title:'men'},
{id:3,title:'women'},
{id:1,title:'kids'},
{id:4,title:'sports'},
{id:5, title:'women'},
{id:6,title:'kids'}
];
Expected Array
[
{ id: 2, title: 'men' },
{ id: [3,5], title: 'women' },
{ id: [1,6], title: 'kids' },
{ id: 4, title: 'sports' }
]
Tried
let array = [{id:2,title:'men'},{id:3,title:'women'},{id:1,title:'kids'},
{id:4,title:'sports'}, {id:5, title:'women'},{id:6,title:'kids'}];
for(let i=0; i<array.length-1;i++){
for(let j=i+1; j<array.length; j++){
if(array[i].title===array[j].title)
array[i]={id:[array[i].id, array[j].id], title: array[i].title}
}
}
console.log(array)
Please help to achieve expected result in better way.
Advertisement
Answer
let items = [{
id: 2,
title: 'men'
},
{
id: 3,
title: 'women'
},
{
id: 1,
title: 'kids'
},
{
id: 4,
title: 'sports'
},
{
id: 5,
title: 'women'
},
{
id: 6,
title: 'kids'
}
];
let dest = [];
items.forEach(x => {
let find;
if (find = dest.find(y => y.title === x.title)) {
find.id = Array.isArray(find.id) ? [...find.id, x.id] : [find.id, x.id]
} else {
dest.push(x)
}
})
console.log(dest)