首页 > 解决方案 > 使用 .sort((a,b) => a>b) 对数组进行排序有效。为什么?

问题描述

[9,2,1,80].sort((a,b) => a>b)
// gives [ 1, 2, 9, 80 ]

[9,2,1,80].sort((a,b) => a<b)
// gives [ 80, 9, 2, 1 ]

为什么?我有一些使用上述比较功能的代码。数字的比较函数应该类似于 (a,b) => ab。为什么上面的代码是正确的,如果是的话?

标签: javascriptarrayssorting

解决方案


它有时会起作用 - 取决于您的浏览器和输入数组 - 因为 sort 需要正数、0 或负数作为返回值。表达式a>bora<b返回一个转换为 0 或 1 的布尔值。0 表示它相等,因此这是浏览器的特定实现 - 它如何处理这些相等值 - 您正在使用的地方。

https://www.w3schools.com/jsref/jsref_sort.asp

您还可以通过阅读ECMAScript 规范(这是 Javascript 的基础)来判断相等的值不稳定:

排序不一定是稳定的(也就是说,比较相等的元素不一定保持原来的顺序)。[...] 如果 comparefn 不是未定义的并且不是该数组元素的一致比较函数(见下文),则排序顺序是实现定义的。


推荐阅读