JavaScript数字排序代码说明

时间:2018-06-21 11:16:19

标签: javascript arrays sorting

我正在经历下面的降序数字排序代码并感到困惑:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

上面的代码将返回(b-a),例如100-40 = 60 但是我们数组中没有60。

1 个答案:

答案 0 :(得分:0)

From Mozilla Implementation of Sorting -

  1. 如果compareFunction(a,b)小于0,则将a排序为小于b的索引,即a在前。

  2. 如果compareFunction(a,b)返回0,则使a和b相对不变,但对所有不同元素进行排序。注意:ECMAscript标准不能保证此行为,因此并非所有浏览器(例如,至少可追溯到2003年的Mozilla版本)都遵守此规定。

  3. 如果compareFunction(a,b)大于0,则将b排序为小于a的索引,即b首先出现。
  4. 当给定一对特定的元素a和b作为其两个参数时,
  5. compareFunction(a,b)必须始终返回相同的值。如果返回的结果不一致,则排序顺序不确定。

您可以通过添加一些日志来简单地检查该功能的工作方式。

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