我在 js 中有两个对象数组。虚拟数组如下所示。
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 个对象。那么有什么有效的方法可以实现这一点吗?
最佳答案
减少
第二个数组为由id
索引的Map
,然后使用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 个物体在现代来说根本不算什么。
关于javascript - 根据另一个对象数组的属性对一个对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50835116/