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

如何对数组执行双层排序:先按列分10级分组,再按指定列排序

没问题,我来帮你拆解这两个双层排序的需求,结合代码例子会更直观👇

1. 通用场景:按指定列10为层级分组后再排序

核心思路:先给目标列计算出10为间隔的层级分组(比如数值除以10取整),然后先按这个分组进行排序,再在每个分组内按第二列排序。

举个JavaScript的示例(其他语言逻辑类似,只是语法不同):
假设我们有一个对象数组,要按colA的10层级分组,再按colB升序排序:

const arr = [
  { id: 1, colA: 15, colB: 20 },
  { id: 2, colA: 7, colB: 15 },
  { id: 3, colA: 23, colB: 25 },
  { id: 4, colA: 12, colB: 18 },
  { id: 5, colA: 8, colB: 10 }
];

// 排序逻辑
const sortedArr = arr.sort((a, b) => {
  // 计算10层级的分组标识
  const groupA = Math.floor(a.colA / 10);
  const groupB = Math.floor(b.colA / 10);
  
  // 第一步:按分组排序(升序)
  if (groupA !== groupB) {
    return groupA - groupB;
  }
  // 第二步:同组内按colB升序排序
  return a.colB - b.colB;
});

排序后的结果会先把colA在0-9、10-19、20-29的元素分成三组,每组内按colB从小到大排列。如果需要降序,只需要把返回值的正负调换即可。

2. 特定需求:edd分组+组内price排序

针对你提到的规则:edd分为1-10、11-20、21-30三个分组,先按edd分组排序,再在每个分组内按price排序,我们可以这样实现:

步骤1:定义分组规则

先写一个辅助函数,用来判断每个元素属于哪个分组:

const getEddGroup = (edd) => {
  if (edd >= 1 && edd <= 10) return 1;
  if (edd >= 11 && edd <= 20) return 2;
  if (edd >= 21 && edd <= 30) return 3;
  return 0; // 处理超出范围的元素,默认放在最前面
};

步骤2:执行双层排序

假设我们有如下输入数组:

const items = [
  { edd: 25, price: 100 },
  { edd: 8, price: 50 },
  { edd: 15, price: 70 },
  { edd: 22, price: 90 },
  { edd: 12, price: 60 },
  { edd: 5, price: 80 }
];

排序代码:

const sortedItems = items.sort((a, b) => {
  const groupA = getEddGroup(a.edd);
  const groupB = getEddGroup(b.edd);
  
  // 先按分组升序(1→2→3)
  if (groupA !== groupB) {
    return groupA - groupB;
  }
  // 同组内按price升序排序(如果要降序就写 b.price - a.price)
  return a.price - b.price;
});

预期结果

排序后的数组如下:

[
  { edd: 8, price: 50 },
  { edd: 5, price: 80 },
  { edd: 12, price: 60 },
  { edd: 15, price: 70 },
  { edd: 22, price: 90 },
  { edd: 25, price: 100 }
]

可以看到:

  • 所有edd在1-10的元素排在最前面,组内按price从低到高排列
  • 接着是edd11-20的元素,同样按price升序
  • 最后是edd21-30的元素,按price升序排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:42