这个JS排序功能如何工作?

时间:2016-04-20 19:29:18

标签: javascript sorting

我在JS书中看到了这段代码,但不太了解发生了什么。有人可以解释一下吗?

var values = [ 213, 16, 2058, 54, 10, 1965, 57, 9 ];
values.sort(function(value1,value2){ return value2 - value1; });

似乎排序只是取两个值的差异,但它返回排序的数组。现场背后发生了什么?

2 个答案:

答案 0 :(得分:0)

如果你刚才有这个代码:

var values = [ 213, 16, 2058, 54, 10, 1965, 57, 9 ];
values.sort();

然后使用默认比较函数对值进行排序。您最终将按字母顺序排序,并将数组中的每个值视为字符串。

将函数作为参数传递给sort函数时,它将根据该函数进行排序。对于任何两个值,它将根据返回值是正值还是负值来交换它们。具体而言(根据MDN):

  • 如果compareFunction(a,b)小于0,则将a排序为低于b的索引,即a先出现。
  • 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  • 如果compareFunction(a,b)大于0,则将b排序为低于a的索引。
  • compareFunction(a,b)在给定一对特定元素a和b作为其两个参数时必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。

当且仅当您可以保证所有值都是数字并且差异永远不会溢出时,使用差异函数很方便。提供的比较函数将按降序对数组进行排序。

答案 1 :(得分:0)

您可以查看mozilla开发人员文档,有很多示例sort