面试题之(sort排序)
面试主要问题是有无参数时候的区区别。
1
如果省略参数,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
let arr = ['General','Tom','Bob','John','Army'];
let resArr = arr.sort();
console.log(resArr);//输出 ["Army", "Bob", "General", "John", "Tom"]
let arr2 = [30,10,111,35,1899,50,45];
let resArr2 = arr2.sort();
console.log(resArr2);//输出 [10, 111, 1899, 30, 35, 45, 50]
2
传入参数,实现升序,降序;
let arr3 = [30,10,111,35,1899,50,45];
arr3.sort(function(a,b){
return a - b;
})
console.log(arr3);//输出 [10, 30, 35, 45, 50, 111, 1899]
let arr4 = [30,10,111,35,1899,50,45];
arr4.sort(function(a,b){
return b - a;
})
console.log(arr4);//输出 [1899, 111, 50, 45, 35, 30, 10]
3
当json对象时候使用对象某属性即可
let arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];
arr5.sort(function(a,b){
return a.id - b.id
})
console.log(arr5);
//输出新的排序
// {id: 2}
// {id: 3}
// {id: 5}
// {id: 6}
// {id: 9}
// {id: 10}
值得一提的是,sort排序的算法使用了两种,如果是小于10的,直接采用插入排序,稳定性较高,时间复杂度也不高。如果大于10,则采用快速排序,找到基准,左右判断,不断递归判断排序。
总结
至于为什么会是按unicode编码排序,主要是因为源码里面它会自动判断,如果没有没有传入函数参数,它会把它转为字符串进而按unicode编码排序。也有的伙伴会说是按ascll码排序,主要是因为unicode码属于全世界统一的编码,基本上所有的字符都能找到,而ascll码只是方便某一方面方便使用才出现的,而它字符包含得也不是很多。
评论