How do I sort an array of objects based on the ordering of another array?
I have a list of objects:
[ { id: 4, name:'alex' }, { id: 3, name:'jess' }, { id: 9, name:'...' }, { id: 1, name:'abc' } ]
I have another list with the right "order".
[ 3, 1, 9, 4]
How can I match the first list to the ordering of the second list, based on the key "id"? The result should be:
[ { id: 3, name:'jess' }, { id: 1, name:'abc' }, { id: 9, name:'...' }, { id: 4, name:'alex' } ]
I stepped in this problem and solved it with a simple .sort
Assuming that your list to be sorted is stored in the variable needSort
and the list with the order is in the variable order
and the both are in the same scope you can run a .sort
like this:
needSort.sort(function(a,b){
return order.indexOf(a.id) - order.indexOf(b.id);
});
It worked for me, hope it helps.
How I solved pretty much the same issue
data = [{ id: 4, name:'alex' }, { id: 3, name:'jess' }, { id: 9, name:'...' }, { id: 1, name:'abc' } ];
sorted = [3, 1, 9, 4].map((i) => data.find((o) => o.id === i));