在JavaScript中使用null进行排序时得到了意外的结果

3

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

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个回答

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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接