【问题标题】:Sort an array of numbers so that null values come last对数字数组进行排序,使空值排在最后
【发布时间】:2017-05-06 11:24:27
【问题描述】:

我有一个这样的数组:

var arr = [5, 25, null, 1, null, 30]

使用此代码将数组从低到高排序,这是显示为输出的内容:

null null 1 5 25 30

arr.sort(function (a, b) {
    return a - b;
};

但是,我希望最后显示空值,如下所示:

1 5 25 30 null null

我查看了Sort an array so that null values always come last 并尝试了这段代码,但是输出仍然与第一个相同 - 空值首先出现:

arr.sort(function (a, b) {
        return (a===null)-(b===null) || +(a>b)||-(a<b);
};

【问题讨论】:

    标签: javascript arrays sorting


    【解决方案1】:

    您可以先按非null 排序,然后按数字排序。

    var arr = [5, 25, null, 1, null, 30]
    
    arr.sort(function(a, b) {
      return (b != null) - (a != null) || a - b;
    })
    
    console.log(arr)

    【讨论】:

    • 你会怎么做才能使数组看起来像 [30, 25, 5, 1, null, null] ...?
    • @razorsyntax arr.sort((a, b) =&gt; (b != null) - (a != null) || b - a)
    • @NenadVracar 如果要先放置 null 怎么办??
    • @ThomasAllen 如果 a 为空且 b 不为空,则表达式的第一部分的结果将为 1,因为因为 (b != null) - (a != null) = true - false = 1 - 0 = 1 而当 a 不为空且 b 为空时,则结果将是-1。如果 a 和 b 都不为空,则第一个条件的结果为 0,因为 false - false = 0 - 0 = 0 然后在 || 之后调用表达式的第二部分那只是a - b
    • @AbhishekEkaanth 您只需在返回表达式的第一部分切换 a 和 b,就像这样 jsfiddle.net/812y4j5c/1
    【解决方案2】:

    我会使用与null 的严格比较,因为任何类型转换都被省略了,第二部分只需要ab 的增量进行排序。

    给定的示例适用于具有空值或某些属性的对象,例如给定键 numberfor,在 null 值和数字的数组中不可用。

    var array = [5, 25, null, 1, null, 30];
    
    array.sort(function(a, b) {
        return (a === null) - (b === null) || a - b;
    });
    
    console.log(array);

    【讨论】:

    • 简洁的解决方案,但它有点“棘手”。如果我正在扫描代码,肯定需要再看一遍。
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    相关资源
    最近更新 更多