I want to remove duplicates, and to left only unique items in a sub-object array.
function display_message() {
let filteredSerivces =
[
{
"ServiceTypeId": 805,
"ServiceTypeName": "Custom Services 1",
"GroupedServices": [
{
"Id": 5247,
"ServiceTypeId": 805,
"ServiceName": "Some service A2",
"Name": "A1",
"Duration": 30,
"DurationForClient": 30,
"Order": 4,
"EmployeeId": 3683
},
{
"Id": 5254,
"ServiceTypeId": 805,
"ServiceName": "Some service A2",
"Name": "A2",
"Duration": 30,
"DurationForClient": 30,
"Order": 4,
"EmployeeId": 3683
},
{
"Id": 5254,
"ServiceTypeId": 805,
"ServiceName": "Some service A6",
"Name": "A2",
"Duration": 30,
"DurationForClient": 30,
"Order": 4,
"EmployeeId": 3684
}
],
"Order": 4
},
{
"ServiceTypeId": 804,
"ServiceTypeName": "Custom Services 2",
"GroupedServices": [
{
"Id": 5246,
"ServiceTypeId": 804,
"ServiceName": "Some service B1",
"Name": "B1",
"Duration": 30,
"DurationForClient": 30,
"Order": 5,
"EmployeeId": 3696
},
{
"Id": 5248,
"ServiceTypeId": 804,
"ServiceName": "Some service B2",
"Name": "B2",
"Duration": 30,
"DurationForClient": 30,
"Order": 5,
"EmployeeId": 3700
},
{
"Id": 5248,
"ServiceTypeId": 804,
"ServiceName": "Some service B2",
"Name": "B2",
"Duration": 30,
"DurationForClient": 30,
"Order": 5,
"EmployeeId": 3683
}
],
"Order": 5
}
]
//TASK: The goal is to remove duplicate object (leave just one) from an array object GroupedServices
// the key for this distinction is "Id".
// example:
// {
// "Id": 5254,
// "ServiceTypeId": 805,
// "ServiceName": "Some service A2",
// "Name": "A2",
// "Duration": 30,
// "DurationForClient": 30,
// "Order": 4,
// "EmployeeId": 3683
// },
// {
// "Id": 5254,
// "ServiceTypeId": 805,
// "ServiceName": "Some service A6",
// "Name": "A2",
// "Duration": 30,
// "DurationForClient": 30,
// "Order": 4,
// "EmployeeId": 3684
// }
//=> in this case we need to remove second object, because it has same Id with a first object (Id: 5254)
//WHAT I HAVE BEEN TRIED:
var uniqueGroupedServices = Array.from(filteredSerivces.GroupedServices().reduce((map, obj) => map.set(obj.Id, obj), new Map()).values());
console.log(uniqueGroupedServices);
}
<input type="button" onclick="display_message();" value="click"/>
But obviously my code doesn't work. I guess I need to iterate for each
in this main array to approach to GroupedServices
but I don't know how. Also, how can I remove second occasion of same object (same Id)?