JavaScript .sort() 函数:返回值 0、-1 和 1 分别代表什么意思?

9

我正在学习JavaScript,目前正在学习数组的.sort()函数。我知道它可以不带参数或带一个介于a-b和b-a之间的参数。

然而,我不明白的是return 0return -1return 1的用法。以下是一个例子(来源:http://www.codewars.com/kata/572df796914b5ba27c000c90):

var arr=[1,2,3,4,5,6,100,999]
arr.sort((a,b)=>{
  if (a%2==b%2) return a-b;
  if (a%2>b%2) return -1;
  return 1;
})
console.log(arr)

//output: [ 1, 3, 5, 999, 2, 4, 6, 100 ]

我理解它的作用,即将奇数和偶数分开,并按升序排序。但是return -1return 1的含义是什么?有人能逐步解释这个函数吗?
我尝试更改一些值并玩一下代码,例如将return -1更改为return 0,以尝试理解它如何工作,但我仍然不理解。
哪里可以找到详细了解return元素的资源?

2
阅读文档。https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/sort - Striped
2
排序比较有三种可能的结果:小于、大于和等于。 - Vj-
它们不是“-1”和“+1”。它们是负数、零或正数值。它不一定要是“-1”,任何负值都可以胜任。 - axiac
2个回答

5
根据 sort 文档:
如果提供了参数 functionComparison,则按比较函数的返回值对数组元素进行排序。 如果 a 和 b 是要比较的两个元素,则:
- 如果 `functionComparison(a, b)` 小于 `0`,我们将 a 排在索引小于 b 的位置上(a 将排在 b 之前)。 - 如果 `functionComparison(a, b)` 返回 `0`,我们不会改变 a 和 b 相对于彼此的位置,但是相对于所有其他元素进行排序。注意:ECMAScript 标准不保证此行为,因此所有浏览器(例如2003年之前的 Mozilla 版本)都不会遵守此行为。 - 如果 `functionComparison(a, b)` 大于 `0`,我们将 b 排在索引小于 a 的位置上。
`functionComparison(a, b)` 必须始终从同一组参数返回相同的结果。 如果函数返回不一致的结果,则未定义排序项的顺序。
现在如果 `a > b`,则 `returning 1` 或 `a positive value` 是相同的,同样,如果 `a < b`,则返回 `-1` 或 `difference` 是相同的。如果它们都相等,则差值为 `0`,因此 `return 0`。

0
哪里可以找到有关返回元素的详细资源? return值是用于比较器函数的。 根据规范
如果comparefn不是undefined,它应该是一个接受两个参数x和y并返回负值(如果x < y),零(如果x = y)或正值(如果x > y)的函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接