Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

139
Views
Javascript: Merging Object Array

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?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

You can use JSON.stringify to look for equality in the addons object and then merge your objects. Like this:

const array = [
  {
    "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"
    }
  }
];

const mergedArray = [];
const addonsToIndexMap = {};

array.forEach(item => {
 const stringifyAddon = JSON.stringify(item.addons);    
 let indexInTheMap = addonsToIndexMap[stringifyAddon];
 if(indexInTheMap !== undefined) {
   mergedArray[indexInTheMap] = {...mergedArray[indexInTheMap], ...item};
 } else {
   mergedArray.push(item);
   addonsToIndexMap[stringifyAddon] = mergedArray.length - 1;
 }
});
console.log(mergedArray);

The use of addonsToIndexMap is just for optimization purposes. Note: This method only works if the order of keys within the addon objects is the same. Also, I rectified the input in my program to update the key call_uuid_l with call_uuid_1 to get the expected output, as mentioned in the comments. Please modify it accordingly.

about 4 years ago · Juan Pablo Isaza Report

0

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'
    }
  }
]
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!