第七颗皮蛋
新手
新手
  • 最后登录2019-06-14
  • 发帖数7
阅读:7700回复:1

[javascript]arr.sort()排序深入(数字元素排序的原理,以及更复杂的排序应用。)

楼主#
更多 发布于:2019-02-20 18:10
.sort() 是数组对象内置的一个排序方法,可以对数组内部的元素按照某种规则进行排序。


.sort()是一个方法(函数),可以被数组调用,所以他肯定与其他普通函数一样,可能拥有参数和返回值。


.sort()可以接受一个函数作为可选参数。


arr.sort(); //不传入参数则按照默认方式进行排序(按照字符编码的顺序进行排序)。


arr.sort(function(a,b){  })
传入的函数以数组中的元素作为两个参数。
上面稍微有点绕,可以理解为.sort()方法会对数组进行遍历,并且每次遍历会传入当前元素和下一个元素作为参数到function(a,b){  }中。
function(a,b){  }需要一个返回值,如果返回值大于0,则 a 元素排在 b 元素的后面,否则 a 元素排在 b 元素的前面。


因此当我们传入
function(a,b){
    return a - b;
}
时,就能对原数组进行升序排序,反之,当返回值为 return b - a;时对数组进行降序排序。


知道了上面的原理后,我们可以进行一些更复杂一点的应用。
代码如下:

        let a = [{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25},{'姓名':'王花花','年龄':19}];
        function older(a,b){
            return a['年龄'] - b['年龄'];
        }
        a.sort(older);
        console.log(a);

以上数组 a 的子元素是存储了个人性别和年龄信息的对象,通过定义传入.sort()的函数,实现了对数组 a 中的对象按照年龄大小进行排序。
第七颗皮蛋
新手
新手
  • 最后登录2019-06-14
  • 发帖数7
沙发#
发布于:2019-02-20 20:39
.sort()方法复写。

      function mySort(arr,fn) {
            for(let i=1,n=arr.length; i<n; i++){
                if(fn(arr[i-1],arr [ i ] )>0){
                    arr.splice(i-1,2,arr[ i ],arr[i-1]);
                    (i>1)&&(i=i-2);
                }
            }
        }

测试:
     let arr = [3,1,5,2,4,7,3,-5,0,-9];
        mySort(arr,function (a,b) {
            return b - a;
        });
        console.log(arr);


结果:[7,5,4,3,3,2,1,0,-5,-9]


        let a = [{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25},{'姓名':'王花花','年龄':19}];
        mySort(a,function (a,b) {
            return a['年龄'] - b['年龄'];
        });
        console.log(a);


结果:[{'姓名':'王花花','年龄':19},{'姓名':'张三','年龄':22},{'姓名':'李四','年龄':25}]


说明:mySort()函数接收两个参数,第一个参数为需要排序的数组,第二个参数为排序函数(该函数接收遍历原数组的两个元素,返回值大于0则从小到大排序,反之从大到小排序)。
游客


返回顶部

公众号

公众号