[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。为什么上面的代码正确(如果正确)?
答案 0 :(得分:2)
有时会起作用-取决于您的浏览器和输入数组-因为sort期望返回一个正数,0或一个负数。表达式a>b
或a<b
返回一个布尔值,该布尔值被转换为0或1。0表示它是相等的,因此这是浏览器的特定实现-它如何处理这些相等的值-您正在使用发挥作用。
https://www.w3schools.com/jsref/jsref_sort.asp
您还可以通过阅读ECMAScript-spec(这就是Javascript的基础)来判断相等的值是不稳定的:
排序不一定是稳定的(也就是说,比较相等的元素不一定 必须保持其原始顺序)。 [...] 如果comparefn不是未定义的,并且不是该数组元素的一致比较函数(请参见下文),则排序顺序是实现定义的。
答案 1 :(得分:1)
>
仅返回0(等于)或1(更大),而排序比较函数必须返回负数,零或正数。这就是为什么>或<对某些值起作用的原因