zoukankan      html  css  js  c++  java
  • 按名称排序

    2014年7月8日23:31:59

    今天要下班的时候,本来兴致满满,不用加班,终于可以回家喝绿豆汤的那一刻,测试妹子提了一个捉急的需求。。

    一级部门要按照固定部门的顺序排序,如果没有,就放在最后面。

    一瞬间,我满满的回家热情就被浇灭了。闲话少扯,下面步入正题。

    具体需求:按“合众媒体”,“合众互动”,“合众娱乐”,“服务中心”的顺序把一级部门排序,不在这四个里面的放在最后面。

    最开始想到的是写在数组里,然后循环找到它的位置进行排序,但是循环。。还是尽量少用,哗哗的效率问题,最后灵机一动,突然机智了一下,想到下面的方法。

    比如,我有“三”,“五”,“一”,按照“一","二","三","四","五”的顺序排序,代码如下:

    1 var a=["一","二","三","四","五"];
    2 var b=["三","五","一"];
    3 
    4 var c=a.join();
    5 b.sort(function(n1,n2){
    6     return c.indexOf(n1)-c.indexOf(n2);
    7 });
    8 
    9 console.log(b); // 输出:["一", "三", "五"]

    这么就出来了。但如果var b=["六","三","五","一"];,则b输出为["六", "一", "三", "五"],两种方法:

    方法一:

     1 // 改变sort的判断方向,改变a的方向
     2 
     3 var a=["五","四","三","二","一"]; // a的方向
     4 var b=["六","三","五","一"];
     5 
     6 var c=a.join();
     7 b.sort(function(n1,n2){
     8     return c.indexOf(n2)-c.indexOf(n1); // sort的方向
     9 });
    10 
    11 console.log(b); // 输出["一", "三", "五", "六"]

    方法二:

     1 // 根据sort原理:函数返回值小于0则换位,大于0则不换位
     2 // 如果排序数组里没它,就不让他换位置,堆到最后面去
     3 
     4 var a=["一","二","三","四","五"];
     5 var b=["六","三","五","一"];
     6 
     7 var c=a.join();
     8 b.sort(function(n1,n2){
     9     var i1=c.indexOf(n1),i2=c.indexOf(n2);
    10     if(i1<0)return 1; // 没有它,不换位,后边呆着去
    11     return i1-i2;
    12 });
    13 
    14 console.log(b); // 输出["一", "三", "五", "六"]

    最后,再完善一下,比如排序数组变成var a=["一","二五","三","四六","五"];这种情况,在一个值里面可能会检索到另一个值,这时需要加上分隔符,这里就简单用个逗号了。

     1 // 完整版(选用的第二种方法,明显B格比较高)
     2 
     3 var a=["一","二五","三","四六","五"]; // 按这个顺序排
     4 var b=["六","三","五","一"];         // 要排序的数组
     5 var split=",";                      // 分隔符
     6 
     7 var c=addSplit(a.join(split));      // ",一,二五,三,四六,五,"
     8 b.sort(function(n1,n2){
     9     var i1=c.indexOf(addSplit(n1)),
    10         i2=c.indexOf(addSplit(n2));
    11     if(i1<0)return 1;
    12     return i1-i2;
    13 });
    14 
    15 function addSplit(s){               // 都套上分隔符,跟正则里的边界是一样一样的
    16     return split+s+split;
    17 }
    18 
    19 console.log(b);                     // 输出["一", "三", "五", "六"],哦呵呵呵呵~

    这篇文章算是本人第一篇技术方面的文章了,主要写写思路,感觉一个小时没白忙活。

    虽然现在还没有,但下面那句话还是要加上,以后有了再补上链接和二维码:

    如果您觉得这文章对您有帮助,可以打赏点钱给我,鼓励我继续写一些高质量的博文。

    (二维码)+(链接)

    PS:日子过得太悠闲,得抓紧了。。。

  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/ccforeverd/p/3861710.html
Copyright © 2011-2022 走看看