我在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},];
我可以按照与arr2相同的ID顺序对arr1进行排序。所以arr1变成了
[{'id':2,'name':'Miles'},
{'id':3,'name':'John'},
{'id':1,'name':'David'},];
实际数组每个都有900个对象。那么有没有有效的方法来实现这个目标呢?
答案 0 :(得分:6)
reduce
将第二个数组转换为Map
索引的id
,然后在排序时使用Map.get
标识ID的位置。 Map
已确保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);

现代仍有900件物品。
答案 1 :(得分:1)
// cache arr1 id to index, id is key, index is value
let arr1IdToIndex = arr1.reduce((sum, cur, index) => (sum[cur.id] = index, sum), {})
let result = arr2.map(cur => arr1[arr1IdToIndex[cur.id]])
arr1 = result