I have an array of objects with nested object, as shown below:
[
{
"metric1": 4.1,
"addons": {
"call_uuid_1": "13d1e097-0363-4a81-b9e4-85c6a770cdb2",
"ThisDN_1": "50002",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
},
{
"metric2": -12345.123412341234,
"addons": {
"call_uuid_2": "13d1e097-0363-4a81-b9e4-85c6a770cdb3",
"ThisDN_2": "50003",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
},
{
"metric3": -2345.123412341234,
"addons": {
"call_uuid_1": "13d1e097-0363-4a81-b9e4-85c6a770cdb2",
"ThisDN_1": "50002",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
},
{
"metric4": -345.12341234123414,
"addons": {
"call_uuid_2": "13d1e097-0363-4a81-b9e4-85c6a770cdb3",
"ThisDN_2": "50003",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
}
]
I want to merge some of the array objects with the same nested object addons
, so that the previous array becomes:
[
{
"metric1": 4.1,
"metric3": -2345.123412341234,
"addons": {
"call_uuid_1
": "13d1e097-0363-4a81-b9e4-85c6a770cdb2",
"ThisDN_1": "50002",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
},
{
"metric2": -12345.123412341234,
"metric4": -345.12341234123414,
"addons": {
"call_uuid_2": "13d1e097-0363-4a81-b9e4-85c6a770cdb3",
"ThisDN_2": "50003",
"call_uuid": "13d1e097-0363-4a81-b9e4-85c6a770cdb4",
"ThisDN": "50004"
}
}
]
Are there any ways to do this?
If the array has more than one element with the same addons
object, you can delete the first one's addons
object and then merge it with the others.
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (JSON.stringify(arr[i]["addons"]) === JSON.stringify(arr[j]["addons"])) {
delete arr[i]["addons"];
Object.assign(arr[i], arr[j]);
arr.splice(j, 1);
j -= 1;
}
}
}
Output:
[
{
metric1: 4.1,
metric3: -2345.123412341234,
addons: {
call_uuid_1: '13d1e097-0363-4a81-b9e4-85c6a770cdb2',
ThisDN_1: '50002',
call_uuid: '13d1e097-0363-4a81-b9e4-85c6a770cdb4',
ThisDN: '50004'
}
},
{
metric2: -12345.123412341234,
metric4: -345.12341234123414,
addons: {
call_uuid_2: '13d1e097-0363-4a81-b9e4-85c6a770cdb3',
ThisDN_2: '50003',
call_uuid: '13d1e097-0363-4a81-b9e4-85c6a770cdb4',
ThisDN: '50004'
}
}
]