当前位置: 首页 > news >正文

js 两个数组按照第二个数组的顺序排序

在JavaScript中,如果想根据一个数组的顺序来排序另一个数组,你可以使用Array.prototype.sort()方法并结合Array.prototype.indexOf()方法来达到这个目的。具体的例子:

方法1:使用sort()indexOf()

通过sort()函数中的比较函数来比较array1中的元素在array2中的索引位置。如果元素在array2中的索引较小,它将被排在前面。

let array1 = [3, 1, 2];
let array2 = [2, 3, 1];array1.sort((a, b) => array2.indexOf(a) - array2.indexOf(b));
console.log(array1); // 输出: [2, 3, 1]
方法2:创建一个映射对象

创建一个映射对象,该对象将array2中的元素映射到其在数组中的索引位置。然后使用这个映射对象在sort()函数中进行比较。

let array1 = [3, 1, 2];
let array2 = [2, 3, 1];let indexMap = {};
array2.forEach((item, index) => {indexMap[item] = index;
});array1.sort((a, b) => indexMap[a] - indexMap[b]);
console.log(array1); // 输出: [2, 3, 1]

注意事项:

如果array2中的某个元素在array1中不存在,这种方法将不会改变该元素的顺序。例如,如果array1[3, 4, 1],那么排序后的结果将是[4, 3, 1],其中4不会被排序。如果希望不存在的元素排在最后,可以稍作修改:

let array1 = [3, 1, 2];
let array2 = [2, 3, 1];let indexMap = {};
array2.forEach((item, index) => {indexMap[item] = index;
});array1.sort((a, b) => {let indexA = indexMap[a] !== undefined ? indexMap[a] : Number.MAX_SAFE_INTEGER;let indexB = indexMap[b] !== undefined ? indexMap[b] : Number.MAX_SAFE_INTEGER;return indexA - indexB;
});
console.log(array1); // 输出: [4, 3, 1],其中4排在最后

扩展(数组对象)

方法1:使用一个查找表

创建一个包含所有arr2id的查找表(或称映射),然后使用这个查找表来帮助排序。

let arr1 = [{ id: 3, name: "Item 3" },{ id: 1, name: "Item 1" },{ id: 2, name: "Item 2" }
];let arr2 = [{ id: 2 },{ id: 3 },{ id: 1 }
];// 创建一个查找表
let idMap = {};
arr2.forEach((item, index) => {idMap[item.id] = index;
});// 使用查找表进行排序
arr1.sort((a, b) => {let indexA = idMap[a.id];let indexB = idMap[b.id];return indexA - indexB;
});console.log(arr1);

方法2:直接使用Array.prototype.sort()Array.prototype.findIndex()结合

如果不想创建额外的查找表,可以直接在排序函数中使用Array.prototype.findIndex()来查找每个元素的索引。

let arr1 = [{ id: 3, name: "Item 3" },{ id: 1, name: "Item 1" },{ id: 2, name: "Item 2" }
];let arr2 = [{ id: 2 },{ id: 3 },{ id: 1 }
];arr1.sort((a, b) => {let indexA = arr2.findIndex(item => item.id === a.id);let indexB = arr2.findIndex(item => item.id === b.id);return indexA - indexB;
});console.log(arr1);
记录一下~
http://www.xdnf.cn/news/1020871.html

相关文章:

  • MoneyPrinterTurbo根据关键词自动生成视频
  • Windows MySQL8密码忘了解决办法
  • 全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠
  • L1-078 吉老师的回归
  • https 证书链不完整问题解析与解决方案
  • 非本地地址调用摄像头需要https
  • python可视化:从《歌手2025》到同类型节目全面解析
  • MCP(模型上下文协议)——AI生态的“万能插座”
  • 爬百度图片如何解决{“antiFlag“:1,“message“:“Forbid spider access“}
  • 造成服务器宕机的原因都有哪些?
  • 【评测】Qwen3-Embedding与nomic-embed-text的召回效果对比
  • 光谱数据分析的方法有哪些?
  • Linux配置go环境
  • 比特币的运行机制---第2关:比特币的区块与网络
  • 《编译原理》课程作业
  • 09 - TripletAttention模块
  • 百空间成网 可信数据生态如何重塑数字时代生产关系
  • 基于Docker实现frp之snowdreamtech/frps
  • Linux NFS服务器配置
  • 手阳明大肠经之下廉穴
  • goland 的 dug 设置
  • 我会秘书长杨添天带队赴光明食品集团外高桥食品产业园区考察调研
  • 为何京东与蚂蚁集团竞相申请稳定币牌照?
  • 阿里云服务器操作系统 V3(内核版本 5.10)
  • 数据结构与算法-线性表-线性表的应用
  • electron在单例中实现双击打开文件,并重复打开其他文件
  • leetcode HOT 100(128.连续最长序列)
  • day54 python对抗生成网络
  • C# 结构(属性和字段初始化语句和结构是密封的)
  • C#最佳实践:推荐使用 null 条件运算符调用事件