2015-07-03 48 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