有没有更优的方法对二维数组按照两个不同条件执行二次排序?
优化方案
你可以仅通过一次sort调用实现需求,无需连续排序两次,既减少冗余逻辑也能提升一倍排序性能。
实现代码(和你原有逻辑保持一致,为原地排序,会修改传入的原数组)
function sortArr(array) { return array.sort((a, b) => { // 优先按子数组第二位降序排序 if (b[1] !== a[1]) { return b[1] - a[1]; } // 第二位相等时按子数组第一位升序排序 return a[0] - b[0]; }); }
不修改原数组的版本
如果需要避免修改传入的原数组,可以先对数组做浅拷贝再排序:
function sortArr(array) { return [...array].sort((a, b) => { if (b[1] !== a[1]) { return b[1] - a[1]; } return a[0] - b[0]; }); }
验证效果
调用sortArr([[3,2],[1,2],[2,1]])会直接返回你期望的结果[[1,2],[3,2],[2,1]]。
内容的提问来源于stack exchange,提问作者heapnoob
相关产品推荐
相关产品推荐

