我试着运行下面的代码:
<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/
有人知道输出是否是预期的吗?或者为什么输出中显示的是顺序?
1条答案
按热度按时间l7wslrjt1#
在JavaScript中,函数
sort()
处理所有非数字值,如NaN
和undefined
。在JavaScript中,NaN
是一个特殊值,不等于任何其他值,包括其自身,这就是为什么当您尝试对包含NaN
的数组进行排序时,undefined
这是一个缺失值,被认为小于任何其他值,这就是为什么undefined
在升序和降序中都显示在最后。这种行为并不特定于D3,它只是JavaScript语言。