javascript深度理解数组的sort()排序
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript深度理解数组的sort()排序相关的知识,希望对你有一定的参考价值。
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, 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]
这两种就是对数组内容要不高的情况下,进行。
三、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, 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
)
以上是关于javascript深度理解数组的sort()排序的主要内容,如果未能解决你的问题,请参考以下文章