如何用JavaScript正确排序二维数组?现有排序逻辑结果不符
解决二维数组的多条件排序问题
嘿,我明白你现在的困扰啦——你本来想先按二维数组的第一列排序,第一列相同的再按第二列排序,但分两次调用sort()的方式行不通,因为第二次排序会完全打乱第一次的结果。
问题出在哪?
你第一次按第一列排序后,数组会变成:[["0","4"], ["1","6"], ["1","5"], ["2","3"]]。但第二次单独按第二列排序时,sort()会对整个数组重新排序,而不是只在第一列相同的组内调整顺序。这就导致["2","3"]因为第二列的"3"更小,直接跑到了["0","4"]前面,完全破坏了第一列的排序结果。
正确的做法:一次排序完成多条件判断
我们可以在同一个sort()回调里完成双重判断:先比较第一列的值,如果第一列相等,再比较第二列的值。这样就能实现你想要的「先按第一列升序,第一列相同则按第二列升序」的效果。
代码示例:
const myArray = [ ['1','6'], ['1','5'], ['2','3'], ['0','4'] ]; myArray.sort(function(a, b) { // 先计算第一列的差值 const firstColumnDiff = a[0] - b[0]; // 如果第一列不相等,直接返回差值决定顺序 if (firstColumnDiff !== 0) { return firstColumnDiff; } // 第一列相等时,再比较第二列的差值 return a[1] - b[1]; }); console.log(myArray); // 输出:[["0","4"], ["1","5"], ["1","6"], ["2","3"]]
简化写法(箭头函数版)
如果喜欢更简洁的代码,可以用逻辑或||来简化判断:
myArray.sort((a, b) => (a[0] - b[0]) || (a[1] - b[1]));
原理和上面一样:如果a[0]-b[0]不为0,就返回这个值;如果为0(即第一列相等),就返回a[1]-b[1]的结果。
这样就能完美得到你期望的排序结果啦!
内容的提问来源于stack exchange,提问作者tonymx227
相关产品推荐
相关产品推荐

