在JavaScript中使用null排序时获得意外结果

时间:2015-07-03 13:05:21

标签: javascript arrays sorting

我有一个包含如下值的数组:

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]

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

1 个答案:

答案 0 :(得分:2)

null强制数学运算中的0"null"操作中的字符.toString(),这是当您不提供回调时会发生的情况。

所以在第一个代码中,它就好像你要对它进行排序:

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

在第二个问题上,好像你正在对此进行排序:

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

如果您需要它与第一个一样,那么您需要确保a===null值始终返回高于其他数字的值,并且b===null值始终返回低一个值。< / p>

&#13;
&#13;
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;
&#13;
&#13;