在了解sort()方法如何正确排序数字前,我们需要知道unicode编码方式当中数字>大写字母>小写字母>中文的,如下图:
接下来我们正式进入正题。
一、JavaScript的数字与字符
JavaScript当中的数字和字符是两种不同数据类型,不能相互比较,因此在调用sort()方法的时候,会对数字进行字符串的转换:
转化之后就可以按照unicode表格来进行排序了,
可以看到上边我们创建的这个数组完全按照刚刚我们说讲的方式进行排序,
unicode里边的数字只有0-9,所以sort首先会对字符串最左边的字符进行排序,然后是第二位排序,然后才是第三位
下边是数字的排序过程:
我们添加两个参数(x,y)
var arr=[3,15,8,28,102,22];
arr.sort((x,y)=>{
console.log(x+'-'+y+'='+(x-y));
return x-y;
});
console.log(arr);
运行结果:
实际上x是后边那个元素,y是前边那个元素,而我们添加相减的运算规则后,底层排序规定实际是这样的。
二、排序一个数字数组
所以我们要的到一个数字数组的升序只需要
var arr=[3,15,8,28,102,22];
arr.sort((x,y)=>{
console.log(x+'-'+y+'='+(x-y));
return x-y;
});
console.log(arr);
//[3, 8, 15, 22, 28, 102]
降序只需要改成改成y-x即可即可:
var arr=[3,15,8,28,102,22];
arr.sort((x,y)=>{
console.log(x+'-'+y+'='+(x-y));
return y-x;
});
console.log(arr);
//[3, 8, 15, 22, 28, 102]
总结一下:
一次传入两个数字,x实际是后边那个元素,y实际是前面那个元素
升序:
就是把小的数字放在前面,大的数字放在后边,那么我们只需要用后边的数字减去前边的数字,如果后边的数字真的比前边的数字小,那么返回值就会小于0,那么就会调整位置。x会移动到y前面。 写法也就是 return x-y
降序:
就是把大的数字放在前面,小的放在后边,只需要用前面的数字减去后边的数字,如果后边的数字真的比前边的数字大,那么返回值就会小于0,也就会调整位置 写法也就是: return y-x