JS sort的爱恨情仇
一:数组的排序
数组排序方法为sort( ),
默认情况下,sort()方法将按字母和升序将值作为字符串进行排序。即数组里就算装的都是数字,也会被转换成字符串再排序。
正因为如此,sort() 方法在对数字进行排序时会产生不正确的结果。
我们需要通过提供“比较函数”来解决此问题,即给sort传入一个自定义的比较函数。初学JS时,理解不了为啥要传一个我看不太懂的函数,而且总是记不住该函数咋写。
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
return b-a; // 按降序对数组中的数字进行排序
});
因为初学时看着这样使用看着别扭,养成个习惯。每次需要给数组排序时,自己写个函数。傻乎乎的不知疲惫,使用大学课堂上学的循化里循环(冒泡排序)。
function mySort(arr){
for(let i=0;i<arr.length;i++){
for(let a=i+1;a<arr.length;a++){
if(arr[i] < arr[a]){
let test = arr[a];
arr[a] = arr[i];
arr[i] = test;
return arr;
var points = [40, 100, 1, 5, 25, 10];
mySort(points); // 返回 [100, 40, 25, 10, 5, 1]
后来JS写的多了,不再觉得sort使用比较函数晦涩难懂。虽然现在依旧不知道为啥传入这样一个函数,但是内心已被:“人家sort函数就是这样定义的,按传参要求传就行了“ 理念打败。
二:对象数组的排序
工作后,经常需要给从接口返回来的装满对象的数组,根据对象某个字段排序。知道昨天我还是下意识的按照上面循环里套循环来处理,但是团队协作让我觉得这样写太low。感觉别人会觉得我是个傻子
于是开始使用sort的原生用法,简便快捷,与大家的编程习惯一致
var points = [
{name:'qq',age: 5},
{name:'ali',age: 15},
{name:'didi',age: 11},
{name:'zijie',age: 96},