Nested forEach loops to add object to existing object javascript

Is there a better way to iterate over two array of objects than what I have done below? It seems messy to do it this way. I’m using lodash.

var array1 = [
  {id:4356, name: 'James', sex: 'male'},
  {id:7899, name: 'Jimmy', sex: 'male'},
  {id:2389, name: 'Dawn', sex: 'female'}
];

var array2 = [
  {id:4356, salary: 1000, job: 'programmer'},
  {id:7899, salary: 2000, job: 'tester'},
  {id:2389, salary: 3000, job: 'manager'}
];

Example output:

console.log(array1[0])
{
  id:4356,
  name: James,
  sex: male,
  person: {
    id:4356,
    salary: 1000,
    job: programmer
  }
}

Function:

_.forEach(array1, function(item1) {
  _.forEach(array2, function(item2) {
   if(item1.id === item2.id){
      item1.person = item2;
    }
  });
});

solution

Since you’re using lodash, you could use the _.find() method to find the corresponding object in array2 based on the id properties.

_.forEach(array1, function(item1) {
  item1.person = _.find(array2, {id: item1.id});
});

It’s worth pointing out that this will result in an undefined person property if an object isn’t found. If that’s a problem, simply check to see if an object is returned:

_.forEach(array1, function(item1) {
  var obj = _.find(array2, {id: item1.id});
  if (obj) {
    item1.person = obj;
  }
});

Without lodash, it would be pretty similar:

array1.forEach(function(item1) {
  item1.person = array2.find(function (item2) {
    return item2.id === item1.id;
  });
});