sort深入研究

首先了解一个知识点:回调函数
**回调函数: **把一个方法A当做参数值传递给另一个函数B,然后在B执行的过程中,我们可以随时根据需求让A方法执行。

    function A() {

    }
    function B(callback) {
        callback();
        callback();
        callback();
    }
    B(A);

而对数组进行排序的方法sort(),也可以使用回调函数来对数组进行排序。

    var ary = [12, 23, 14, 34, 23, 1, 14, 16, 26, 2];
    ary.sort(); // -> 这样只能处理10以内的数字排序
    ary.sort(function (a, b) {
        // return a - b;
        // a -> 每一次执行匿名函数的时候,找到的数组中的当前项
        // b -> 当前项的后一项
        // console.log(a, b);
        // return a - b; // 升序 如果a > b, 返回的 > 0, a 和 b 交换位置
        // return b - a; // 降序 如果b > a, 返回的 > 0, a 和 b 交换位置
        // -> return的是一个大于0或者小于等于0的数,大于0让a和b交换位置,小于等于0,原有位置不动
    });

sort()实现数组的逆序排序:

    var ary = [12, 23, 14, 34, 23, 1, 14, 16, 26, 2];
    ary.sort(function (a, b) {
        return 1; // -> 将数组逆序排序,相当于reverse()
        // 不管a和b谁大,每一次都返回一个恒大于零的数字,也就是说,每一次a和b都要交换位置
        // 所以最终的结果就是原有的数组倒序排序了,相当于reverse().
    });

复杂数据类型的排序:

    var ary = [
        {name: 'derrick', age: 20},
        {name: 'rose', age: 25},
        {name: 'qian', age: 15},
        {name: 'QianQian', age: 100}
    ];

    // -> 给该数组排序,按照年龄由小到大进行排序
    ary.sort(function (a, b) {
        return parseFloat(a.age) - parseFloat(b.age);
    });
    console.log(ary);

    // -> 给该数组排序,按照年龄由大到小进行排序
    ary.sort(function (a, b) {
        return (parseFloat(a.age) - parseFloat(b.age)) * -1;
    });
    console.log(ary);

    // -> 按照姓名排序
    ary.sort(function (a, b) {
        return a.name.localeCompare(b.name);
    });
    console.log(ary);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容