I have an array of objects in JavaScript and would like to filter it, if there is two events that are equel so their days concat and if there is duplicate value in days array remove it.
here is my array:
[ { event: 'approvalDate', days: [ 1, 2, 3, 4, 5] },
{ event: 'appointDate', days: [ 1 ] },
{ event: 'approvalDate', days: [ 120, 14, 9, 4, 1, 2 ] } ]
I want the result like this
[ { event: 'approvalDate', days: [ 1, 2, 3, 4, 5,120, 14, 9] },
{ event: 'appointDate', days: [ 1 ] },
]
>Solution :
const items = [
{ event: 'approvalDate', days: [1, 2, 3, 4, 5] },
{ event: 'appointDate', days: [1] },
{ event: 'approvalDate', days: [120, 14, 9, 4, 1, 2] },
];
const result = [];
items.forEach((item) => {
if (!result.find((e) => e.event === item.event)) {
result.push(item);
} else {
const index = result.findIndex((e) => e.event === item.event);
result[index].days = [...new Set([...result[index].days, ...item.days])];
}
});