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)
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);