2015-07-03 45 views
3

排序我有一个包含这样的值的数组:获得意想不到的结果,而与空在JavaScript

var testSorting = [0,null,1,0,1,null]; 

当我这样的排序是:

testSorting.sort() 

然后输出[0, 0, 1, 1, null, null]

但是,如果我这样做:

testSorting.sort(function(a, b){ 
    return a-b; 
}); 
console.log(testSorting); 

输出是[0, null, 0, null, 1, 1]

我不知道为什么结果是这样的。我需要的结果是像第一种方法。

回答

2

null胁迫到0在数学运算,并在.toString()操作,这是当你不提供一个回调会发生什么字符串"null"

所以在第一个代码,就好像你排序是:

['0','null','1','0','1','null'] 

而在第二个,就好像你排序是:

[0,0,1,0,1,0]; 

如果您需要它要像第一个那样,那么您需要确保a===null值始终返回比其他数字更高的值,并且b===null值总是返回一个更低的值。

var testSorting = [0,null,1,0,1,null]; 
 

 
testSorting.sort(function(a, b){ 
 
    return a === null ? Infinity : 
 
      b === null ? -Infinity : 
 
         a - b; 
 
}); 
 
document.querySelector("pre").textContent = JSON.stringify(testSorting, 2, null);
<pre></pre>

+0

Yuppy这是工作。非常感谢 – htoniv

+0

不客气。 – 2015-07-03 13:21:13