代码之家  ›  专栏  ›  技术社区  ›  Nico44044

JS对数组进行排序,数组末尾为null和空值

  •  -3
  • Nico44044  · 技术社区  · 6 月前

    我在JS中有这个数组:

        var my_array = [['line_1','2'],['line_2','0'],['line_3','5'],['line_4',''],['line_5','4'],]
        
    var my_sorted_array =my_array.sort((a, b) => a[1] - b[1])
    
    console.log(my_sorted_array)

    现在,为了按第二个项目进行排序,我使用了下面的代码

    但我想把空白/空和null值放在最后。

    预期结果:

    [['line_1','2'],['line_5','4'],['line_3','5'],['line_2','0']['line_4','']]
    

    谢谢

    2 回复  |  直到 6 月前
        1
  •  1
  •   Carsten Massmann    6 月前

    你可以替换每一个 0 价值与 Infinity 在进行排序比较时:

    let a = [['line_1','2'],['line_2','0'],['line_3','5'],['line_4',''],['line_5','4']];
    
    a.sort(([,a],[,b])=>(+a||Infinity)-(+b||Infinity));
    
    console.log(a);
        2
  •  1
  •   Nico44044    6 月前

    我验证了卡斯滕·马斯曼的答案,因为它比我的更短、更容易。多亏了他。

    这是我最终找到的另一种方法:

    var my_sorted_array = my_array.sort(function(a, b) {
        if(a[1] === "" || a[1] === null || a[1] === "0") return 1;
        if(b[1] === "" || b[1] === null || b[1] === "0") return -1;
        if(a[1] === b[1]) return 0;
        return a[1] < b[1] ? -1 : 1;});