function compare(a, b) {
if (a is less than b by some ordering criterion) {
// how minus 1 will affect to sort? how sort will understand this value?
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
或下一个示例:
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]
我知道只知道1和0的" true"或" false"。/p>
Array.prototype.sort
函数期望回调返回一个数字,而不是布尔值(例如,不是true
或false
)。它使用该号码来知道它给出的两个条目的排序应该是什么。您可以想象sort
中的逻辑与这些行:
result = callback(a, b);
if (result < 0) {
// Make sure `a` is before `b`
} else if (result > 0) {
// Make sure `b` is before `a`
} else {
// It doesn't matter which is first, they're equivalent
}
如您所见,true
和false
不涉及(除了<
或>
的结果)。
这意味着,如果a
和b
是数字,并且回调返回a - b
,它将以数值为单位,因为如果a
小于b
,则结果将为负面;如果a
大于b
,则结果将为正;如果它们相同,结果是0
。
MDN的文档很好地描述了这一点:
arr.sort(compareFunction)
如果提供了compareFunction,则对数组元素进行排序 根据比较函数的返回值。如果A和B是 然后比较两个元素,然后:
- 如果compareFunction(a,b)小于0,则将A排序a索引比b低,即A首先出现。
- 如果compareFunction(a,b)返回0,则彼此之间保持A和B的不变,但相对于所有人进行排序 不同的元素。注意:Ecmascript标准不
保证这种行为,因此并非所有浏览器(例如Mozilla
) 至少可以追溯到2003年的版本尊重这一点。- 如果compareFunction(a,b)大于0,则将B排序为较低的索引。比较功能(a,b)必须始终返回相同的 当给予特定元素A和B作为两个元素A和B时的价值 争论。如果返回结果不一致,则排序订单 是未定义的。