JavaScript中的数字排序

JavaScript中的数字排序,javascript,Javascript,我想对一个数值数组进行排序,我发现这样一个代码: <!DOCTYPE html> <html> <body> <p>Click the button to sort the array in ascending order.</p> <button onclick="myFunction()">Try it</button> <p id="demo"></p> <script

我想对一个数值数组进行排序,我发现这样一个代码:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to sort the array in ascending order.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;    

function myFunction() {
    points.sort(function(a, b){return a-b});
    document.getElementById("demo").innerHTML = points;
}
</script>

</body>
</html>
代码运行正常,但我无法理解语句是如何运行的
points.sort(函数(a,b){返回a-b})正在工作,什么是a和b?

这很容易理解:

if(a < b){
  return -1;
} else if( a > b){
  return 1;
} else { 
  return 0;
}
if(ab){
返回1;
}否则{
返回0;
}

a和b是数组中相互比较的数字

因此,如果a-b为负,则表示b>a,因此,如果列表升序,则将a置于b之前

依照

如果比较函数(a,b)小于0,则将a排序到比 b、 也就是说,a是第一位的

如果compareFunction(a,b)返回0,则保持a和b彼此不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证 这种行为,因此并非所有的浏览器(例如,至少可以追溯到2003年的Mozilla版本)都遵守这一点

如果比较函数(a,b)大于0,则将b排序为比a低的索引。比较函数(a, b) 当给定一对特定的元素a和b作为其两个参数时,必须始终返回相同的值

如果返回不一致的结果,则未定义排序顺序


Array.sort
是一个函数,它将比较函数作为参数

排序时,sort函数调用比较函数,传入正在排序的数组的两个元素

  • 如果此函数返回小于零的值,则比第一个值小 元素应保持在第二个元素的左侧

  • 如果它返回的数字大于零,则比第一个元素大 应该位于第二个的右侧(在排序数组中)

  • 如果它返回零,则这些元素相等且不相等 不管他们按什么顺序呆着

因此,要更改排序顺序(如果需要),只需将compare函数切换为

return b - a;

为什么不做一个
console.log
&看看a&b的值是多少。这个问题的答案足以让你产生疑问@lastr2d2将你引向文档。需要注意的重要一点是,
sort
方法再次比较
0
大于0
小于0
。虽然返回
0、1、-1
的特定值很常见,但它们不是必需的。
return b - a;