You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据另一个数组的值对JavaScript对象数组进行排序?

根据指定数组排序对象数组的解决方案

针对你需要按照newIndexes数组的顺序对driverArray排序的需求,可以用以下高效的方法实现:

核心思路

先将driverArray转换为以pos值为键的映射结构,这样就能通过newIndexes中的元素快速找到对应的对象,再按顺序生成排序后的数组。这种方法的时间复杂度为O(n),比你提供的纯数组示例中的O(n²)方法更高效。

代码实现

const driverArray = [
   {label: "Driver 1",  pos: 1},
   {label: "Driver 2",  pos: 2},
   {label: "Driver 3",  pos: 3},
   {label: "Driver 4",  pos: 4},
   {label: "Driver 5",  pos: 5},
   {label: "Driver 6",  pos: 6},
   {label: "Driver 7",  pos: 7},
   {label: "Driver 8",  pos: 8},
   {label: "Driver 9",  pos: 9},
   {label: "Driver 10", pos:10}
];

const newIndexes = [1,2,3,7,4,8,5,9,6,10];

// 1. 创建pos到driver对象的Map映射
const driverMap = new Map(driverArray.map(driver => [driver.pos, driver]));

// 2. 根据newIndexes的顺序生成排序后的数组
const sortedDrivers = newIndexes.map(pos => driverMap.get(pos));

// 验证结果
sortedDrivers.forEach(driver => console.log(driver.label));
// 输出顺序:Driver 1, Driver 2, Driver 3, Driver 7, Driver 4, Driver 8, Driver 5, Driver 9, Driver 6, Driver 10

替代方案(使用普通对象)

如果不想使用Map,也可以用普通对象来实现映射:

// 创建pos到driver对象的普通对象映射
const driverObj = {};
driverArray.forEach(driver => {
  driverObj[driver.pos] = driver;
});

// 生成排序后的数组
const sortedDrivers = newIndexes.map(pos => driverObj[pos]);

为什么这个方法更优

你提供的纯数组示例中,每次遍历sorting数组都要对items进行一次filter操作,相当于嵌套循环,数据量大时性能会下降。而映射查找的方式只需要遍历两次数组(一次构建映射,一次生成结果),整体效率更高,代码也更简洁。

内容的提问来源于stack exchange,提问作者Powl_London

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:57:19