var arr = [5, 2, 1, -10, 8];
arr.sort(function(a, b) {
console.log(a,b)
return b - a;
}) ; // 8, 5, 2, 1, -10
这个回调函数是如何工作的?
选择a和b的原则是什么?
请从内部解释这个特定的例子。
输出console.log(首先,请解释这个输出):
5 2
2 1
1 -10
-10 8
1 8
2 8
5 8
var arr = [5, 2, 1, -10, 8];
arr.sort(function(a, b) {
console.log(a,b)
return b - a;
}) ; // 8, 5, 2, 1, -10
这个回调函数是如何工作的?
选择a和b的原则是什么?
请从内部解释这个特定的例子。
输出console.log(首先,请解释这个输出):
5 2
2 1
1 -10
-10 8
1 8
2 8
5 8
这取决于具体的实现方式。这个实现看起来像是插入排序,针对这么多数据(可能会不同,例如Chrome,以及少于10个或多于10个数据时的不同实现),它会从索引0开始遍历,如果在最后两个数据上没有发生交换,那么就停止了,否则就向后回到索引0。
基本上,它按照这个顺序进行测试和更改
5 2 1 -10 8 original order
5 2
2 1
1 -10
-10 8 swap
8 -10
1 8 swap
8 1
2 8 swap
8 2
5 8 swap
8 5 2 1 -10 result
更复杂的排序展示了更清晰的过程,其中有两个大值需要移到数组的另一侧
8 9 1 2 3 4 original array
8 9
9 1 swap
1 9
8 1 swap
1 8
9 2 swap
2 9
8 2 swap
2 8
1 2
9 3 swap
3 9
8 3 swap
3 8
2 3
9 4 swap
4 9
8 4 swap
4 8
3 4
1 2 3 4 8 9 result
仅为示例,不适用于所有用户代理程序(例如Edge不支持,但Chrome支持)
var array = [8, 9, 1, 2, 3, 4];
console.log(JSON.stringify(array));
array.sort(function (a, b) {
console.log(a , b, JSON.stringify(array));
return a - b;
});
console.log(JSON.stringify(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }
b
之后的 a
,并且必须交换它们的位置。 - Justinas它将通过将其移动到该值较低或较高的位置来按减去的值对项目进行排序。
以下是一些信息:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
如果提供了compareFunction,则根据比较函数的返回值对数组元素进行排序。如果正在比较的两个元素是a和b,则: - 如果compareFunction(a,b)小于0,则将a排序到低于b的索引,即a排在前面。 - 如果compareFunction(a,b)返回0,则相对于其他所有不同的元素保持a和b不变,但已排序。注意:ECMAscript标准不保证此行为,因此并非所有浏览器(例如至少可以追溯到2003年的Mozilla版本)都遵守此行为。 - 如果compareFunction(a,b)大于0,则将b排序到低于a的索引。 - 当给定特定的一对元素a和b作为其两个参数时,compareFunction(a,b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
function compareNumbers(a, b) {
return a - b;
}
如果它返回正数则交换,否则不交换。
吗? - Mahi1, 2, 3
- 如果它比较 1, 2
,就会发现 1 < 2
;如果它比较 2, 3
,就会发现 2 < 3
,通过这两个事实,它可以跳过检查 1, 3
,因为已经暗示着 1 (< 2) < 3
。如果您的排序算法表示 2 和 3 相等(return 0
),那么根据数据集如何遍历,从排序中得到的信息也可能是不正确的 - 您可能最终得到一个数组 [2, 1, 3]
。 - VLAZ