基于另一个对象数组的属性对对象数组进行排序

Azw*_*bib 2 javascript arrays sorting jquery

我在js.dummy数组中有两个对象数组如下所示.

arr1=[{'id':1,'name':'David'},
      {'id':2,'name':'Miles'},
      {'id':3,'name':'John'},];

arr2=[{'id':2,'age':22},
      {'id':3,'age':18},
      {'id':1,'age':12},];
Run Code Online (Sandbox Code Playgroud)

我可以按照与arr2相同的ID顺序对arr1进行排序.所以arr1变成了

[{'id':2,'name':'Miles'},
      {'id':3,'name':'John'},
      {'id':1,'name':'David'},];
Run Code Online (Sandbox Code Playgroud)

实际的数组每个都有900个对象.那么有没有有效的方法来实现这一点?

Cer*_*nce 6

reduce第二个数组Mapids 索引,然后用于Map.get在排序时标识id的位置.Maps保证了O(1)查询时间:

const arr1 = [{'id':1,'name':'David'},{'id':2,'name':'Miles'},{'id':3,'name':'John'},];
const arr2 = [{'id':2,'age':22},{'id':3,'age':18},{'id':1,'age':12},];

const ids = arr2.reduce((map, { id }, i) => map.set(id, i), new Map());
arr1.sort((a, b) => ids.get(a.id) - ids.get(b.id));
console.log(arr1);
Run Code Online (Sandbox Code Playgroud)

尽管如此,在现代,900件物品并不多.