描述sort
Array的sort()
方法用于对原数组进行排序,不会产生新的数组,改变原数组。排序默认的规则是按照数组元素的字符编码进行排序。默认按照字母顺序升序排序,更准确地说是按照ASCII码顺序排序
如果要按照自己的意愿对数组进行升序或者降序排序,就需要对sort传入一个比较函数,该方法有两个参数a,b
进行比较,并且接收由两个参数比较所得的结果 a>b
返回值为1 a 返回值-1
a=b
返回值为0 。
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()方法中还可接受参数,参数为一个函数,用来指定按某种顺序进行排列的函数。
该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。凡是返回1或者大于0的正数的时候这两个值就要交换位置
升序排列
let arr1 = ['b', 'g', 'a', 'd', 'c'];
arr1.sort(function(a, b) {
if(a > b) {
return 1; // 交换顺序
} else {
return -1; // 顺序不变
}
}) // ["a", "b", "c", "d", "g"]
降序排列
let arr2 = [5, 1, 8, 3];
arr2.sort(function(a, b) {
if(a < b) {
return 1; // 交换顺序
} else {
return -1; // 顺序不变
}
}) // [8, 5, 3, 1]
这两种就是对数组内容要不高的情况下,进行。
但是特别注意: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, b) {
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码值来做简单的方式函数,但是
console.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, b) => {
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
})