sort()对数组排序

sort的描述

描述sort

Array的​​sort()​​方法用于对原数组进行排序,不会产生新的数组,改变原数组。排序默认的规则是按照数组元素的字符编码进行排序。默认按照字母顺序升序排序,更准确地说是按照ASCII码顺序排序
如果要按照自己的意愿对数组进行升序或者降序排序,就需要对sort传入一个比较函数,该方法有两个参数​​​a,b​​​进行比较,并且接收由两个参数比较所得的结果 ​​a>b​​​ 返回值为1 ​​a<b​​​ 返回值-1 ​​a=b​​ 返回值为0 。

一、sort函数的基本用法

let arr1 = ['b', 'g', 'a', 'd', 'c'];
console.log(arr1.sort()); // ["a", "b", "c", "d", "g"]

let arr2 = [5, 1, 8, 3];
console.log(arr2.sort()); // [1, 3, 5, 8]

二、sort函数接受一个函数作为参数

sort()方法中还可接受参数,参数为一个函数,用来指定按某种顺序进行排列的函数。
该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。凡是返回1或者大于0的正数的时候这两个值就要交换位置

升序排列

let arr1 = ['b', 'g', 'a', 'd', 'c'];
arr1.sort(function(a,) {
if(a > b) {
return 1; // 交换顺序
} else {
return -1; // 顺序不变
}
}) // ["a", "b", "c", "d", "g"]

降序排列

let arr2 = [5, 1, 8, 3];
arr2.sort(function(a,) {
if(a < b) {
return 1; // 交换顺序
} else {
return -1; // 顺序不变
}
}) // [8, 5, 3, 1]

这两种就是对数组内容要不高的情况下,进行。

三、sort函数接受简化后的函数作为参数

但是特别注意:​​return a-b​​​;这种写法只适用于纯数字内容,因为字母无法进行加减运算,那么就可以通过这种方式来实现这个
​​​ return b.charCodeAt(0)-a.charCodeAt(0)​

// 升序排列
if(a>b) {
return 1;
} else {
return -1;
}

// 简化为:
return a-b;

// 降序排列简化为
return b - a;

// 所以上述降序排列可写为:
let arr2 = [5, 1, 8, 3];
arr2.sort(function(a,) {
return b - a;
}) // [8, 5, 3, 1]

//实现字符倒序
let arr = ['b', 'g', 'a', 'd', 'c'];
console.log(arr.sort((a,b)=>{
return b.charCodeAt(0)-a.charCodeAt(0)
// return b-a;不行
}));

四、数组中包含对象进行排序

分两种情况:


第一种:我按照这个value值,也就是​​字符值,但是这个字符值是数字​​​来排序
按理说需要获取这个字符的ASCII码值来做简单的方式函数,但是

.log("3"-"1");隐式转换为数字嘞,就不用这个转换就直接可以
输出2;
let objList1 = [{
name: 'a',
value: '1'
}, {
name: 'd',
value: '12'
}, {
name: 'b',
value: '11'
}, {
name: 'e',
value: '9'
}]

那么就可以这么写:

objList1.sort((a,) => {
return a.value-b.value
})

第二种:
我按照这个value值,也就是数字来排序
直接可获取就完事排序,也就是

var obj = [{pid: 22, name: '阿肆', sex: '女'},{pid: 11, name: '阿牛', sex: '男'} ,{pid: 13, name: '阿牛', sex: '男'}]  
obj.sort(function(a,b){
return a.pid-b.pid
})