zoukankan      html  css  js  c++  java
  • js对象数组按属性快速排序

    前一篇《关于selector性能比赛》中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序。
    按所推荐的程序在IE下跑了下,的确,排序耗时很小。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    /*
    * 快速排序,按某个属性,或按“获取排序依据的函数”,来排序.
    * @method soryBy
    * @static
    * @param {array} arr 待处理数组
    * @param {string|function} prop 排序依据属性,获取
    * @param {boolean} desc 降序
    * @return {array} 返回排序后的新数组
    */
    var sortBy =function (arr, prop, desc){
        var props=[],
        ret=[],
        i=0,
        len=arr.length;
        if(typeof prop=='string') {
            for(; i<len; i++){
                var oI = arr[i];
                (props[i] = new String(oI && oI[prop] || ''))._obj = oI;
            }
        }
        else if(typeof prop=='function') {
            for(; i<len; i++){
                var oI = arr[i];
                (props[i] = new String(oI && prop(oI) || ''))._obj = oI;
            }
        }
        else {
            throw '参数类型错误';
        }
        props.sort();
        for(i=0; i<len; i++) {
            ret[i] = props[i]._obj;
        }
        if(desc) ret.reverse();
        return ret;
    };

    Array原生的sort,当它传一个比较函数时,由于它内部用哪种排序算法,都需要多次比对,所以,耗时是很自然的事。
    上面的快速排序,它并没有多次比对,
    而是:
    1。取出el属性值,用属性值产生一个String对象,
    2。将el附在String对象上。
    3。用String对象组成数组。
    4。用原生的sort进String对象数组排序。
    5。在排好序的String数组中,按序取出el。
    即得到排好序的el数组。

  • 相关阅读:
    Java动态代理详解
    (10) openssl dhparam(密钥交换)
    (9) openssl enc(对称加密)
    (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)
    (7) openssl dgst(生成和验证数字签名)
    (6) openssl passwd(生成加密的密码)
    (5) openssl speed(测试算法性能)和openssl rand(生成随机数)
    (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
    (3) openssl genrsa(生成rsa私钥)
    (2) OpenSSL命令
  • 原文地址:https://www.cnblogs.com/chris-oil/p/3812413.html
Copyright © 2011-2022 走看看