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

JavaScript中如何对已排序二维数组的同分数段按rank升序排序

解决同分数下按rank升序排序的问题

嘿,你的这个排序需求其实可以通过一次自定义排序就完美解决,不用拆分两步操作哦!核心思路是在排序函数里先按score降序比较,当score相同时再按rank升序比较,最后转成你需要的二维数组格式就行。

完整代码实现

// 你的原始对象数组
const originalData = [
  { "score": 20, "rank": 12 },
  { "score": 20, "rank": 7 },
  { "score": 34, "rank": 4 }
];

// 自定义排序:先按score降序,同score则按rank升序
const sortedData = [...originalData].sort((a, b) => {
  // 第一步:比较score,降序排列
  if (b.score !== a.score) {
    return b.score - a.score;
  }
  // 第二步:score相等时,按rank升序排列(rank越小越靠前)
  return a.rank - b.rank;
});

// 转换为你需要的二维数组格式
const finalResult = sortedData.map(item => [item.score, item.rank]);

console.log(finalResult);
// 输出结果:[[34, 4], [20, 7], [20, 12]]

关键细节说明

  • 我用了[...originalData]来复制原数组,避免sort()方法的原地排序修改原数据(如果不需要保留原数组,可以直接用originalData.sort(...))。
  • 排序函数的逻辑很清晰:
    • 当两个元素的score不同时,用b.score - a.score实现降序(返回正数则b排在a前面,负数则a排在b前面)。
    • 当score相等时,用a.rank - b.rank实现升序(返回负数则a的rank更小,排在前面)。
  • 最后用map()把每个对象转换成[score, rank]的二维数组,得到你想要的最终格式。

这样操作下来,就能一步得到你期望的排序结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:44:16