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

如何在JavaScript中按多维度优先级排序整数数组的数组

实现任意维度数组的字典序排序

没问题,这其实就是要实现按数组元素顺序依次比较的字典序升序排序,而且要适配任意长度的子数组,我直接给你JavaScript的实现,再讲清楚逻辑~

核心思路

利用JavaScript数组的sort()方法,自定义一个比较函数:遍历子数组的每个维度(和dimensions长度一致),依次比较对应位置的元素,直到找到第一个不相等的元素,返回两者的差值来决定排序顺序。这样不管dimensions是多长,只要boxes里的子数组长度匹配,就能通用。

JavaScript代码实现

const dimensions = [10, 6, 4];
let boxes = [ [1, 2, 1], [10, 2, 4], [4, 1, 1], [10, 2, 3] ];

// 自定义比较函数,实现多维度依次比较
const compareBoxes = (a, b) => {
  // 遍历每个维度索引
  for (let i = 0; i < dimensions.length; i++) {
    // 找到第一个不相等的元素,返回差值(升序排序)
    if (a[i] !== b[i]) {
      return a[i] - b[i];
    }
  }
  // 所有元素都相等时,保持原顺序
  return 0;
};

// 执行排序
boxes.sort(compareBoxes);

console.log(boxes);
// 输出结果:[ [1, 2, 1], [4, 1, 1], [10, 2, 3], [10, 2, 4] ]

代码解释

  • compareBoxes函数是排序的核心:它接收两个待比较的子数组a和b;
  • 循环每个维度的索引i,因为题目保证boxes子数组长度和dimensions一致,所以用dimensions.length作为循环边界;
  • 一旦发现a[i]和b[i]不相等,就返回a[i] - b[i]——这个差值会告诉sort()方法如何排序:如果差值为正,a会排在b后面;如果为负,b排在a后面;
  • 如果所有维度的元素都相等,返回0,保持两个元素在原数组中的相对顺序(利用了sort()的稳定排序特性)。

伪代码版本

如果需要更通用的伪代码表述,大概是这样:

FUNCTION compareBoxes(a, b):
    FOR i FROM 0 TO length(dimensions) - 1:
        IF a[i] != b[i]:
            RETURN a[i] - b[i]
    RETURN 0

APPLY sort operation TO boxes array USING compareBoxes as the comparator

这个方案完全适配你说的任意长度dimensions的场景,测试下来和你给出的预期结果完全一致~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:42:46