sort()
直接使用sort对数组排序
// 坑
[11,20,1,3,5,30].sort(); // [1, 11, 20, 3, 30, 5]
Array
的sort()
方法默认把所有元素先转换为 String 再排序,结果'10'
排在了'2'
的前面,因为字符'1'
比字符'2'
的ASCII码小。
还好,sort()
方法也是一个高阶函数,可以接收一个比较函数来实现自定义的排序。
由小到大排序:
var arr=[11,20,1,3,5,30];
arr.sort((x,y)=>x-y); // Array(6) [ 1, 3, 5, 11, 20, 30 ]
由大到小排序:
var arr=[11,20,1,3,5,30];
arr.sort((x,y)=>y-x); // Array(6) [ 30, 20, 11, 5, 3, 1 ]
字符串忽略大小写排序
var arr=['pear','apple','Banana','Orange']
arr.sort((s1,s2)=>{
x=s1.toUpperCase(); // 忽略大小写就是把字符串统一变成大写或小写
y=s2.toUpperCase();
if(x<y) return -1; // 第一个值小于第二个值时,返回一个负数
if(x>y) return 1;
return 0;
});
sort()
方法会修改原数组,返回的结果也就是原数组。
从上面的例子可以看出,sort
排序是根据前后两个值是大于零还是小于零来决定的,因此可以利用这种机制,使返回值随机大于零或小于零,从而随机打乱一个数组。
let arr = [11, 20, 1, 3, 5, 30];
arr.sort((a, b) => Math.random() * 6 - 3); // 让比较的返回值从-3~3之间随机产生,每次执行都会返回一个随机顺序的数组