javascript d3.sort()中输出数据的顺序-升序与降序

guz6ccqo  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(219)

我试着运行下面的代码:

<script src="https://d3js.org/d3.v7.min.js"></script>
<script>

console.log([10,2,3,7].sort(d3.ascending));
console.log([10,2,3,7].sort(d3.descending));

console.log([10,NaN,2,3,7].sort(d3.ascending));
console.log([10,NaN,2,3,7].sort(d3.descending));

console.log([10,undefined,2,NaN,3,7].sort(d3.ascending));
console.log([10,undefined,2,NaN,3,7].sort(d3.descending));
</script>

升序排序和降序排序之间的输出差异也难倒了我。

CONSOLE OUTPUT:
[Log] [2, 3, 7, 10] 
[Log] [10, 7, 3, 2] 
**[Log] [2, 3, 7, 10, NaN]**
**[Log] [10, NaN, 7, 3, 2]**
[Log] [2, 7, 10, NaN, 3, undefined]
[Log] [10, 7, 2, NaN, 3, undefined]

可观察到的D3教程似乎并没有解决这个问题。事实上,那里似乎还有其他一些问题(关于d3.count()能够计算字符串),当我运行代码时,这些问题也被证明是错误的。因此,我不能依赖https://observablehq.com/@d3/
有人知道输出是否是预期的吗?或者为什么输出中显示的是顺序?

l7wslrjt

l7wslrjt1#

在JavaScript中,函数sort()处理所有非数字值,如NaNundefined。在JavaScript中,NaN是一个特殊值,不等于任何其他值,包括其自身,这就是为什么当您尝试对包含NaN的数组进行排序时,undefined这是一个缺失值,被认为小于任何其他值,这就是为什么undefined在升序和降序中都显示在最后。这种行为并不特定于D3,它只是JavaScript语言。

相关问题