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

166
Views
Group array of objects by id in javascript

There are three objects like this.

var Object1 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "nickname": "uknowTest2",
        "createdAt": "2022-03-22T07:50:41.769Z",
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "nickname": "qnvvzjrh",
        "createdAt": "2022-03-21T07:10:04.888Z",
        "animalCount": 1
    }
];

var Object2 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data": 36
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data": 542717
    }
];

var Object3 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data2": 133111
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data2": 540517
    }
];

And I want to group them like this:

var result = [
    {   
        "_id": "62397fd1c517e11e05935cc7",
        "data": 36,
        "data2": 133111,
        "nickname": "uknowTest2",
        "createdAt": "2022-03-22T07:50:41.769Z",
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data": 542717,
        "data2": 540517,
        "nickname": "qnvvzjrh",
        "createdAt": "2022-03-21T07:10:04.888Z",
        "animalCount": 1
    }
];

Several similar types of data are generated. I'm not sure what to do. Using object.assign doesn't seem to be the solution.

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

0

This solution is taking time complexity of O(n)

Here you go:

const allObj = [...Object1, ...Object2, ...Object3];

const preResult = {};
allObj.forEach((obj)=> {
    preResult[obj._id] = preResult[obj._id] ? {...preResult[obj._id], ...obj} : obj;
})

const result = Object.values(preResult)
console.log(result)

Explaination:

  1. allObj is the concatenation of all objects
  2. allObj.forEach is looping through all elements (sub objects)
  3. Using ternary operator to assign the value
  4. If obj._id (key) already exist in preResult, then assign {...preResult[obj._id], ...obj} (which is concat of existed value and new value)
  5. Else assign new value obj
  6. preResult is pair of obj._id (key) and merged-object (values)
  7. final result is the only values of preResult

Code Snippet:

var Object1 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "nickname": "uknowTest2",
        "createdAt": "2022-03-22T07:50:41.769Z",
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "nickname": "qnvvzjrh",
        "createdAt": "2022-03-21T07:10:04.888Z",
        "animalCount": 1
    }
];

var Object2 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data": 36
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data": 542717
    }
];

var Object3 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data2": 133111
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data2": 540517
    }
];

const allObj = [...Object1, ...Object2, ...Object3];

const preResult = {};
allObj.forEach((obj)=> {
    preResult[obj._id] = preResult[obj._id] ? {...preResult[obj._id], ...obj} : obj;
})

// console.log(preResult)

const result = Object.values(preResult)

console.log(result)

about 4 years ago · Juan Pablo Isaza Report

0

var Object1 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "nickname": "uknowTest2",
        "createdAt": "2022-03-22T07:50:41.769Z",
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "nickname": "qnvvzjrh",
        "createdAt": "2022-03-21T07:10:04.888Z",
        "animalCount": 1
    }
];

var Object2 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data": 36
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data": 542717
    }
];

var Object3 = [
    {
        "_id": "62397fd1c517e11e05935cc7",
        "data2": 133111
    },
    {
        "_id": "623824ccd1164bb8d9cc2521",
        "data2": 540517
    }
];
let result = [...Object1];

let temp = [...result];
Object2.map(val=>{
  result.map((val2,index)=>{
    if(val2._id===val._id){
      val2 = {...val2,...val};
      temp[index] = val2
    }
  })
})
result = [...temp];
Object3.map(val=>{
  result.map((val2,index)=>{
    if(val2._id===val._id){
      val2 = {...val2,...val};
      temp[index] = val2
    }
  })
})
console.log(temp)

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!