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
相关产品推荐
相关产品推荐

