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

如何在JavaScript中对带连字符的数组进行高效双重排序?

高效实现双重规则的数组排序方案

单次排序直接实现需求

不需要两次调用sort(),一次自定义比较函数就能完成双重规则排序,性能更优:

const array = ['201-4', '201-2', '200-1', '202-1'];
array.sort((a, b) => {
  const [aPrefix, aSuffix] = a.split('-').map(Number);
  const [bPrefix, bSuffix] = b.split('-').map(Number);
  
  // 优先按前缀数字排序,前缀相同则按后缀排序
  if (aPrefix !== bPrefix) {
    return aPrefix - bPrefix;
  }
  return aSuffix - bSuffix;
});

console.log(array); // 输出: ['200-1', '201-2', '201-4', '202-1']

超大型数组的优化方案

如果处理的数组规模极大,可先预处理缓存分割后的数值,避免排序过程中重复执行分割和类型转换操作:

const array = ['201-4', '201-2', '200-1', '202-1'];
// 预处理:缓存每个元素的前缀、后缀数值及原字符串
const processedItems = array.map(item => {
  const [prefix, suffix] = item.split('-').map(Number);
  return { original: item, prefix, suffix };
});

// 按规则排序
processedItems.sort((x, y) => {
  if (x.prefix !== y.prefix) {
    return x.prefix - y.prefix;
  }
  return x.suffix - y.suffix;
});

// 还原为原字符串数组
const sortedArray = processedItems.map(item => item.original);
console.log(sortedArray);

为什么比两次排序更好

  • 两次sort()会执行两轮排序遍历,时间复杂度更高(两次O(n log n)),单次排序仅需一轮O(n log n)操作。
  • 自定义比较函数逻辑清晰,直接体现“先前缀后后缀”的排序规则,可读性更强。
  • 转数字操作避免了字符串排序的坑(比如字符串排序时"10"会被认为小于"2")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:45:34