想要按照从小到大的顺序排列
var numbers = [0,1,5,10,15];
numbers.sort();
console.log(numbers);
打印出来是0,1,10,15,5
书中说的是字符串比较下,10在5的前面,这是怎么比较的???
function compare(a,b) {
if (a < b) {
return -1;
}else if(a > b) {
return 1;
}else{
return 0;
}
}
numbers.sort(compare);
console.log(numbers);
比较函数作为参数传递给sort()之后,是怎么让2个数字换位置排列的?不清楚调换位置的动作是哪行代码执行的,难道是sort()本身可以对返回值1,-1, 0做相应的动作让两个数字调换位置吗?
关于第一次排序的结果
为什么数组 [0,1,5,10,15].sort() 之后的结果是 0,1,10,15,5,而不是期待的 0,1,5,10,15
这是因为 sort 方法默认(即没有compare函数)按照数组元素对应的字符串的 Unicode 从小到大进行排序。
也就是说,上面的结果中5排在10,15后面,是因为 '5' 比 '10','15'大。
你现在就可以按F12打开console,输入下面的代码
结果应该是true。这说明,字符串 '5' 比 '10' 大,所以它排在后面。
关于compare函数
compare函数只是指定了 排序策略 ,sort 会根据这个策略来排序。 至于怎么调换位置,怎么生成最后的结果,那是sort的事情。这里其实是一个常见的设计模式,策略模式。有兴趣可以去了解一下。