用.sort((a,b)=> a> b)对数组进行排序是可行的。为什么?

时间:2018-12-18 17:11:36

标签: javascript arrays sorting

[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)=> a-b。为什么上面的代码正确(如果正确)?

2 个答案:

答案 0 :(得分:2)

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

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

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

  

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

答案 1 :(得分:1)

>仅返回0(等于)或1(更大),而排序比较函数必须返回负数,零或正数。这就是为什么>或<对某些值起作用的原因