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()排序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript数组sort()方法小结

JavaScript中sort()方法

javascript中的数组排序——sort()方法

JavaScript中数组Array.sort()排序方法详解

js sort() 数字排序 不太理解

JavaScript 快速排序