Javascript 根据另一个对象数组的属性对对象数组进行排序
我在js中有两个对象数组。虚拟数组如下所示Javascript 根据另一个对象数组的属性对对象数组进行排序,javascript,jquery,arrays,sorting,Javascript,Jquery,Arrays,Sorting,我在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':'
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
s索引,然后使用Map.get
在排序时识别id的位置<代码>映射
s保证了O(1)个查找时间:
const 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},];
const id=arr2.reduce((map,{id},i)=>map.set(id,i),newmap());
arr1.sort((a,b)=>ids.get(a.id)-ids.get(b.id));
控制台日志(arr1)代码>
// 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