首页 > 代码库 > 按名称排序

按名称排序

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){               // 都套上分隔符,跟正则里的边界\b是一样一样的16     return split+s+split;17 }18 19 console.log(b);                     // 输出["一", "三", "五", "六"],哦呵呵呵呵~

 

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

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

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

(二维码)+(链接)

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