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.以及如何比较和排序,了解那是什么(1,-1,0)以及如何使用这些值进行排列?< / p>
答案 0 :(得分:1)
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
。
答案 1 :(得分:0)
documentation at MDN很好地描述了这一点:
arr.sort(compareFunction)
如果提供compareFunction,则对数组元素进行排序 根据比较函数的返回值。如果a和b是 比较两个要素,然后:
- 如果compareFunction(a,b)小于0,则将a排序为低于b的索引,即a先到。
- 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但相对于所有 不同的元素。注意:ECMAscript标准不是 保证这种行为,因此并非所有浏览器(例如Mozilla
至少可以追溯到2003年的版本)尊重这一点。- 如果compareFunction(a,b)大于0,则将b排序为低于a的索引。 compareFunction(a,b)必须始终返回相同的值 给定一对特定元素a和b作为其两个时的值 参数。如果返回不一致的结果,则返回排序顺序 未定义。