Search code examples
javascriptarrayssortinglodash

Sorting array of objects matching ids on a different set


I have an array of objects

array = [
    {id: 5, name: "Helen", age: 20}, 
    {id: 15, name: "Lucy", age: 30}, 
    {id:7, name: "Carlos", age: 1}
]

Then I have a similar array sorted differently

arraySorted = [        
    {id: 15, name: "Lucy", age: 2}, 
    {id: 5, name: "Lara", age: 11}, 
    {id:7, name: "Carlos", age: 10}
]

The ids of the objects on both arrays will always match, the rest of the properties may or may not.

What I need is sorting the array in the same id order as arraySorted.

(it can be also done on plain JavaScript, lodash is not necessary but maybe it will be useful)


Solution

  • Rather than sort, use map, find and Object.assign instead

    arraySorted.map( s => Object.assign( s, array.find( t => t.id == s.id ) ) );
    

    Demo

    var array = [{
        id: 5,
        name: "Helen",
        age: 20
      },
      {
        id: 15,
        name: "Lucy",
        age: 30
      },
      {
        id: 7,
        name: "Carlos",
        age: 1
      }
    ];
    var arraySorted = [{
        id: 15,
        name: "Lucy",
        age: 2
      },
      {
        id: 5,
        name: "Lara",
        age: 11
      },
      {
        id: 7,
        name: "Carlos",
        age: 10
      }
    ];
    array = arraySorted.map(s => Object.assign(s, array.find(t => t.id == s.id)));
    
    console.log(array);