2017-05-06 80 views
4

我有一个这样的数组:排序数字数组,这样空值放在最后

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

使用此代码从低到高排序的数组,这是何等的显示输出:

空空1 5 25 30

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

然而,我想空值是DIS最后出场,就像这样:

1 5 25 30空空

我在Sort an array so that null values always come last看了一下,并试图将此代码,但输出仍是一样的第一 - 空值来第一个:

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

回答

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)

0

我会用与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);

+0

整洁的解决方案,但它是一个有点 “狡猾”。如果我正在扫描代码,肯定需要再看一下。 –