Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据另一个对象数组的属性对对象数组进行排序_Javascript_Jquery_Arrays_Sorting - Fatal编程技术网

Javascript 根据另一个对象数组的属性对对象数组进行排序

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':'

我在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
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