我正在经历下面的降序数字排序代码并感到困惑:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
上面的代码将返回(b-a),例如100-40 = 60 但是我们数组中没有60。
答案 0 :(得分:0)
From Mozilla Implementation of Sorting -
如果compareFunction(a,b)小于0,则将a排序为小于b的索引,即a在前。
如果compareFunction(a,b)返回0,则使a和b相对不变,但对所有不同元素进行排序。注意:ECMAscript标准不能保证此行为,因此并非所有浏览器(例如,至少可追溯到2003年的Mozilla版本)都遵守此规定。
您可以通过添加一些日志来简单地检查该功能的工作方式。
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
console.log("a = " + a +
": b= " + b +
": b - a = " + (b - a) +
" swap a and b if b-a > 0");
return b - a});
输出-
a = 40: b= 100: b - a = 60 swap a and b if b-a > 0
a = 40: b= 1: b - a = -39 swap a and b if b-a > 0
a = 1: b= 5: b - a = 4 swap a and b if b-a > 0
a = 40: b= 5: b - a = -35 swap a and b if b-a > 0
a = 1: b= 25: b - a = 24 swap a and b if b-a > 0
a = 5: b= 25: b - a = 20 swap a and b if b-a > 0
a = 40: b= 25: b - a = -15 swap a and b if b-a > 0
a = 1: b= 10: b - a = 9 swap a and b if b-a > 0
a = 5: b= 10: b - a = 5 swap a and b if b-a > 0
a = 25: b= 10: b - a = -15 swap a and b if b-a > 0