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;