了解Javascript .sort参数

jon*_*jon 4 javascript arrays sorting function

我无法理解为什么以下函数以数字方式对字符串进行排序(在代码的第三部分中).

var myArray = [10, 44, 32, 100, 0, 44, 3, 4];
console.log(myArray.toString()); // 10, 44, 32, 100, 0, 44, 3, 4 --> unsorted

myArray.sort();
console.log(myArray.toString()); // 0,10,100,3,32,4,44,44 --> sorted like strings

// this is what confuses me:
myArray.sort(function (a, b) {
return a - b;
});
console.log(myArray.toString()); // 0,3,4,10,32,44,44,100 --> sorted numerically
Run Code Online (Sandbox Code Playgroud)

特别是:

  1. 如何ab获取填充?

  2. 为什么减去a - b按数字顺序对数字进行排序?

  3. 如果函数一次仅检查2个数字,那么所有数字如何被分类到正确的顺序?(即ab)

Nie*_*sol 6

.sort 采用可选参数,该参数应该是一个函数.

.sort然后重复调用该函数,从数组中传递一对值(ab参数).然后该函数返回一个值,其解释如下:

  • 如果返回的值小于0,那么 a < b
  • 如果返回的值大于0,那么 a > b
  • 如果返回的值正好为0,那么 a == b

使用此功能,.sort使用浏览器编程使用的任何排序算法计算项目的顺序.

在没有排序功能的情况下,.sort将项目排序为字符串 - 这只是设计的任意点.理想情况下,你应该传递一个函数,每当你想使用.sort的东西,因为这里是函数强制值作为数字进行比较的情况.