如何实现一个数组按照另外一个数组的顺序进行排序?
数组arr1按照arr2的顺序展示,如何实现:
一、简单类型数组
let arr1 = [1, 2, 3, 4, 5]
let arr2 = [5, 3, 2, 4, 1]
1 2 3 4 | arr1.sort((prev,next)=>{ return arr2.indexOf(prev)-arr2.indexOf(next) }) console.log(arr1) // [5, 3, 2, 4, 1] |
二、复杂类型数组
let arr1 = [ { id: 1, name: '小米' }, { id: 3, name: '小红' }, { id: 4, name: '小明' }, { id: 2, name: '小华' } ]
let arr1 = [ { id: 1, name: '小米' }, { id: 2, name: '小华' }, { id: 3, name: '小红' }, { id: 4, name: '小明' } ]
1 2 3 | 方法一:<br> let sortIndex = arr2.map(item => item.id) arr1.sort((a, b) => sortIndex.indexOf(a.id) - sortIndex.indexOf(b.id)) console.log(arr1) |
1 2 3 4 5 6 | 方法二: let order = new Map(twoArr.map((item, index) => [item.intID, index]));arr1.sort((a, b) => { let orderA = order.has(a.id) ? order.get(a.id) : Infinity; let orderB = order.has(b.id) ? order.get(b.id) : Infinity; return orderA - orderB; }); console.log(arr1) |
1 2 3 4 5 6 7 8 9 10 | 方法三: const newArr = []; arr2.forEach((twoE) => { arr1.forEach((oneE) => { if (twoE.id === oneE.id) { newArr.push(oneE); } }); }); console.log(newArr) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 方法四: const cache = {}; arr1.sort((a, b) => { const aId = a.id, bId = b.id; let aIndex = cache[aId] ?? -1; let bIndex = cache[bId] ?? -1; if (aIndex < 0 || bIndex < 0) { for ( let i = 0; i < arr2.length; ++i) { const id = arr2[i].id; if (aId === id) aIndex = cache[aId] = i; if (bId === id) bIndex = cache[bId] = i; if (aIndex >= 0 && bIndex >= 0) break ; } } return aIndex - bIndex; }); console.log(arr1) |
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现