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:日子过得太悠闲,得抓紧了。。。
新闻热点
疑难解答