美文网首页
JavaScript 数组排序之 reverse() 、sort

JavaScript 数组排序之 reverse() 、sort

作者: 木子方是个小太阳 | 来源:发表于2019-04-04 17:24 被阅读0次

在js中有两个常用的方法对数组顺序进行调整,reverse()和sort();
其中reverse()就是对数组进行反转,颠倒原来的顺序。
eg:

var nameArr = ['Tom','Jim','Ada','Leanna'];
nameArr.reverse() ==>['Leanna','Ada','Jim','Tom']

主要来说一下sort()方法;

定义:

对数组的元素进行排序.

语法:

arrayObject.sort(sortby) sortby可不选,规定数组排序规则,必须为函数

返回值:

对数组的引用,数组只是在原数组上进行排序,不生成副本。

说明:

如果数组在调用方法的时候没有传参数,则只是按照首字母顺序对数组元素进行排序,或者更精确的说是按照字符编码顺序进行排序,可是这样一般不适用日常操作,所以要传比较函数来规定排序。

比较函数具有两个参数a、b,要比较两个值,然后返回一个说明两个值相对顺序的数字,返回数字如下:

a < b:在排序后的数组中,a应该在b之前。 ( 数组将按照升序进行排序 )
a = b:返回0
a > b:返回一个大于0的值 (数组将按照降序进行排序 )

下面来一起看几个sort()排序的例子

例一:sort() 无回调用法

console.log(numArr.sort())==>[12,224,27,33,52]  

很显然这不是我们想要的结果。

例二:sort() 传参规定排序

var numArr = [12,52,33,224,27]
function numOrderAsce(a,b){
    return a-b;
}
function numOrderDesc(a,b){
    return b-a;
}
console.log(numArr.sort(numOrderAsce))==>[12, 27, 33, 52, 224]
console.log(numArr.sort(numOrderDesc))==>[224, 52, 33, 27, 12]

例三:sort() 对对象数组进行排序

var objarr = [
                {
                    name:'张三',
                    age:10,
                    year:23
                },
                {
                    name:'李四',
                    age:8,
                    year:56
                },
                {
                    name:'王二',
                    age:52,
                    year:12
                },
               
                {
                    name:'周八',
                    age:52,
                    year:91
                }
            ];
    function objArrOrder(type1,type2){
        return function(a,b){
            return a[type1]-b[type1]
                 
        }
    } 
    console.log(objarr.sort(objArrOrder('age','year')))


例四:sort() 对对象数组进行排序(多个条件)

var objarr = [
                {
                    name:'张三',
                    age:10,
                    year:23
                },
                {
                    name:'李四',
                    age:8,
                    year:56
                },
                {
                    name:'王二',
                    age:52,
                    year:12
                },
               
                {
                    name:'周八',
                    age:52,
                    year:91
                }
            ];
    function objArrOrder(type1,type2){
        return function(a,b){
            if(a[type1]!=b[type1]){
                return a[type1]-b[type1]
                }else{
                   return b[type2]-a[type2] 
                }
            
        }
    } 
    console.log(objarr.sort(objArrOrder('age','year')))

其他更多的方法,就看在比较函数里怎么处理,根据实际需求完成。

相关文章

网友评论

      本文标题:JavaScript 数组排序之 reverse() 、sort

      本文链接:https://www.haomeiwen.com/subject/gneqiqtx.html