javascript - 如果项目存在于另一个数组中,则根据键将它们移动到数组的前面
问题描述
我正在根据另一个数组中的键对数组进行排序。如果他们找到匹配项,它会将这些项目移动到数组的前面。但我想不出一个干净的方法来做到这一点。
let myArray = [
{ id: 'a', name: 'Mal' },
{ id: 'b', name: 'Wash'},
{ id: 'c', name: 'Inara'},
{ id: 'd', name: 'Jayne'},
]
let sortArray = [
{ id: 'b' },
{ id: 'c' },
{ id: 'x' },
]
/* Expected result
myArray = [
{ id: 'b', name: 'Wash'},
{ id: 'c', name: 'Inara'},
{ id: 'a', name: 'Mal' },
{ id: 'd', name: 'Jayne'},
]
/*
有没有人知道一种方法来做到这一点,而不仅仅是循环通过它很多次?谢谢
解决方案
您可以创建一个Map
将每个映射id
到sortArray
它的索引。使用此优先级映射对象对第一个数组进行排序。
const array = [{ id: 'a', name: 'Mal' }, { id: 'b', name: 'Wash'}, { id: 'c', name: 'Inara'}, { id: 'd', name: 'Jayne'}],
sortArray = [{ id: 'b' }, { id: 'c' }, { id: 'x' }],
map = new Map( sortArray.map((o, i) => [o.id, i]) )
array.sort((a,b) =>
( map.has(b.id) - map.has(a.id) ) || ( map.get(a.id) - map.get(b.id) )
)
console.log(array)
推荐阅读
- angular - Angular ServiceWorker 返回响应 404 Not Found 并启用输出散列
- python - 如何将文件夹中的多个文件打包成一个二进制文件并获取每个文件的偏移量?
- sql - 如果我的通话记录表中的通话时间不在另一个表的打卡时间和打卡时间字段之外,我如何计算它的总和?
- c# - 在运行其他方法时永远运行一个方法
- python - 积极的后向正则表达式与预期不匹配
- python - 无法在 WSL vscode 中使用 python 扩展
- kubernetes - 将微服务部署到 Kubernetes 的最佳实践
- jquery - 如何使用数据表实现 Daterangepicker?
- c++ - 如何重载访问类属性的结构运算符?
- listview - 在横向模式下无法在屏幕底部看到 ListView