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:日子过得太悠闲,得抓紧了。。。

  • 相关阅读:
    UVA 11997 K Smallest Sums
    POJ 1007 DNA Sorting
    POJ 3669 Meteor Shower
    POJ 2376 Cleaning Shifts
    POJ 3050 Hopscotch
    操作系统第6次实验报告:使用信号量解决进程互斥访问
    操作系统第5次实验报告:内存管理
    操作系统第4次实验报告:文件系统
    操作系统第3次实验报告:管道
    操作系统第2次实验报告:创建进程
  • 原文地址:https://www.cnblogs.com/ccforeverd/p/3861710.html
Copyright © 2011-2022 走看看