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

JavaScript如何使用另一数组取值对二维数组按第一列进行排序

二维数组按指定顺序排序问题解决

原始需求

我有一个二维数组:

var array1 = [
  ["Jasper", "Diesel", "Grid", 2.7],
  ["Delta", "Solar", "Grid", 10],
  ["Alpha", "Wind", "Grid", 20]
]

需要使用如下定义的sortingArray作为优先级,对array1按第一列的字符串值排序:

// 原代码存在笔误,已补全Delta后的闭合双引号
var sortingArray = ["Alpha","Jasper","Delta"]

预期的排序结果如下:

var sortedArray = [
  ["Alpha", "Wind", "Grid", 20],    
  ["Jasper", "Diesel", "Grid", 2.7],
  ["Delta", "Solar", "Grid", 10]
]

问题排查

最开始写的排序代码没有生效,数组完全没有变化:

array1.sort(function (a, b) {  
  return sortingArray.indexOf(a) - sortingArray.indexOf(b);
})

失效原因

上述代码直接将二维数组的整行子数组a、b传入indexOf查询位置,而sortingArray中存储的都是字符串,没有匹配的数组元素,所有比较的返回值都是0,等于告诉排序函数两个元素优先级相同,自然不会改变原有数组顺序。

解决方案

确实需要指定取子数组的第一列(下标为0的元素)参与排序比对,修正后的代码如下:

// 原代码存在语法笔误,已将a[0)、b[0)修正为a[0]、b[0]
array1.sort(function (a, b) {  
  return sortingArray.indexOf(a[0]) - sortingArray.indexOf(b[0]);
})

性能优化方案

如果待排序数组或者排序规则数组的长度比较大,推荐提前把排序优先级存到Map里,避免每次排序比对都遍历数组查索引,运行效率更高:

const sortPriority = new Map(sortingArray.map((val, index) => [val, index]))
array1.sort((a, b) => sortPriority.get(a[0]) - sortPriority.get(b[0]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:03