zoukankan      html  css  js  c++  java
  • js中的sort方法

    js中原生的sort()采用快排和插入排序算法,根据比较器对数组排序。

    默认是将数组元素转为字符串,然后根据Unicode字符集编号的大小排序。

    charCodeAt(index) 返回指定位置字符的 Unicode 编号,取值是 0 - 65535 间的整数,与 charAt() 方法执行的操作相似,后者返回的是单个字符。

    如果不提供比较器而对数字组成的数组排序,因为会将数字转为字符串再按编号排序而导致错误。要获得正确的顺序,只需提供比较器函数:function(a,b){return a-b;}即可。

    两个字符串之间不可以加减运算,但可以比大小,js会依次比编号的大小,如"

    'a'>'A'    //为true,因为 "a".charCodeAt(0)-->97, A-->65
    "ac">"ab"    //为true

     按拼音顺序排序:

    //按本地语言的顺序排序。中英混合时,中文在前英文在后,再分别按拼音顺序排。
    function (a, b) { return a.localeCompare(b); }

    按指定的顺序排序:

    //按指定的特定顺序排序,相同时再按enu2的顺序排
    //利用规则的索引做排序依据
    var enu1=['D','E','C','B','A','A0','A00']; var enu2=['NB','HB','SUV','MPV','SW','Roadster/Coupe/Convertible','-','']; var toSort= ["A00 HB", "A HB", "A0 SUV", "A0 SUV", "A SUV", "E SUV","D NB","A0 HB", "A SUV", "E MPV", "A NB", "C NB", "C HB", "A MPV", "B NB", "A0 NB", "A0 NB"]; toSort.sort(function(a,b){ if(enu1.indexOf(a.split(' ')[0])<enu1.indexOf(b.split(' ')[0])) return -1; if(enu1.indexOf(a.split(' ')[0])>enu1.indexOf(b.split(' ')[0])) return 1; if(enu1.indexOf(a.split(' ')[0])==enu1.indexOf(b.split(' ')[0])) { return enu2.indexOf(a.split(' ')[1])-enu2.indexOf(b.split(' ')[1]) } });
    //["D NB", "E SUV", "E MPV", "C NB", "C HB", "B NB", "A NB", "A HB", "A SUV", "A SUV", "A MPV", "A0 NB", "A0 NB", "A0 HB", "A0 SUV", "A0 SUV", "A00 HB"]

     

  • 相关阅读:
    nodejs MYSQL数据库执行多表查询
    【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
    【BZOJ2693】jzptab 莫比乌斯反演
    【BZOJ2154】Crash的数字表格 莫比乌斯反演
    【BZOJ2242】[SDOI2011]计算器 BSGS
    【BZOJ2005】[Noi2010]能量采集 欧拉函数
    【BZOJ1408】[Noi2002]Robot DP+数学
    【BZOJ2045】双亲数 莫比乌斯反演
    【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数
    【BZOJ4176】Lucas的数论 莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/kevin2chen/p/6646975.html
Copyright © 2011-2022 走看看