为什么这段代码有效?
<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to sort the array.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
var x = document.getElementById("demo");
x.innerHTML=points;
}
</script>
</body>
</html>
我不理解points.sort(function(a,b){return a-b});
部分。
答案 0 :(得分:2)
您所拥有的comparefunction argument syntax Array.prototype.sort
可以用来进行海关操作。它根据您从此函数返回的值和the rules are执行排序,如下所示:
所以你只是返回两个数字之间的区别a&amp; b将完全返回compareFunction排序所需的内容(即-ve --> if a < b
,+ve --> if a > b
或0 --> if a == b
)。
答案 1 :(得分:1)
当您使用sort
方法的回调函数时,它会确定如何比较数组中的两个项目。
如果值相等,则回调函数应返回0.如果第一个参数应在第二个参数之前结束,则回调应返回负值,否则返回正值。
以下是具有相同结果的更具描述性的实现:
points.sort(function(a,b){
if (a == b) {
return 0;
} else if (a < b) {
return -1;
} else {
return 1;
}
});
答案 2 :(得分:1)
sort函数将比较器函数作为其参数。比较器功能起作用:
a-b
履行了这份合同。
例如:如果a = 40
和b = 100
,则a-b = -60
。所以a < b
。
答案 3 :(得分:1)
.sort()
允许您传递一个函数来定义数组的排序方式。目标是相对于当前比较的两个项目返回正(&gt; = 0)或负数(&lt; 0)。我们的想法是,如果您a
并从b
减去,如果a
大于b
,则返回肯定,因此a
将排名更高比b
。如果a
小于b
,则会返回否定,并且b
的排名高于a
。
答案 4 :(得分:1)
sort函数通过查看比较器函数返回的值是负还是正来工作。基本上,如果它是正面的,它会交换数字。如果是负数或零,则按顺序保留它们。它不断遍历数组,直到所有对返回非正值。
在这种情况下:
依此类推......这是相当低效的,所以很可能在幕后,一些更高效的事情正在发生,但为了预测你的输出,这就足够了。
您可以像这样编写排序函数并获得相同的结果:
function(a, b) {
if (a > b) return 1;
else if (a < b) return -1;
else return 0;
}