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

标签 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':'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/

相关文章:

javascript - 停止眨眼事件

jQuery 按钮导航到具有路由值的操作 Controller ?

php - 如何用php将文件内容转换为字节数组

ruby - 从 Ruby 数组中删除对象的替代/更短方法?

java - 如何在数组结果中关联变量

javascript - 从全日历中删除元素(通过拖到垃圾桶)

javascript - 我怎么知道生成 CKEditor 所见即所得编辑器的 javascripts 何时完成执行?

javascript - 如何实现本地存储阵列?

javascript - 使用单击图像映射更改设置为背景的 Sprite 图像的位置

jquery - 轨道末端的 Soundcloud 自定义播放器事件