我有一个包含如下值的数组:
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]
。
我不知道为什么结果是这样的。我需要结果就像第一种方法。
答案 0 :(得分:2)
null
强制数学运算中的0
和"null"
操作中的字符.toString()
,这是当您不提供回调时会发生的情况。
所以在第一个代码中,它就好像你要对它进行排序:
['0','null','1','0','1','null']
在第二个问题上,好像你正在对此进行排序:
[0,0,1,0,1,0];
如果您需要它与第一个一样,那么您需要确保a===null
值始终返回高于其他数字的值,并且b===null
值始终返回低一个值。< / p>
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);
&#13;
<pre></pre>
&#13;