<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    深入聊聊Array的sort方法的使用技巧

    Posted on 2007-06-26 20:16 sunbaby 閱讀(342) 評論(0)  編輯  收藏 所屬分類: 其它
    博客地址:     http://ashun.cnblogs.com/  
       
       
      /********************************************************************/  
       
       
       
      Array.prototype.sort方法是對數組進行排序,   該方法帶一個函數參數,用來指定排序的規則.  
       
      我們先來看看sort   的簡單應用:  
       
       
      var   arr=[2,1,3,4];  
      alert(arr.sort())     //   [1,2,3,4]   從小到大排列  
       
      //現在由大到小排列     得到   [4,3,2,1]  
      alert(arr.sort(function(left,right){return   left>right?-1:1}))  
       
      //這里,sort方法通過參數函數的返回值   1或者-1來決定是順排還是倒排  
       
      還記得我以前和大家說過的   利用   Function.apply   方法來獲取數組中的最大元素的方法嗎?  
      文中用了兩種不同的方法來獲取數組中的最大值.  
      現在   sort也可以來秀一下了.  
       
      var   arr=[2,1,3,4];  
      var   minValue=arr.sort()[0];  
      var   maxValue=arr.sort()[arr.length-1]       //     arr.sort().pop()  
       
        怎么樣,這也是一種另類實現方法吧,還不用寫循環遍歷.    
      不過,我必須要指出的是,這種方法的效率是最低的,對于幾十個百來個元素的數組,你還是可以使用這種技巧.  
      但是,如果數組很大,用   sort()方法可以慢得讓你想抽煙  
       
      進一步討論   sort   對復雜數據結構的排序.  
      1.   對多維數組的排序  
       
       
      var   arr=[  
                                [2,1,55,4],  
                                [5,3,22,3],  
                                [1,2,77,2],  
                                [9,4,33,5],  
                          ];                                    
      alert("默認按第一列排\n"+arr.sort().join("\n"))      
      alert("現在按第三列排\n"+arr.sort(function(left,right){return   left[2]>right[2]?1:-1}).join("\n"))      
      alert("現在按第三列倒排\n"+arr.sort(function(left,right){return   left[2]>right[2]?-1:1}).join("\n"))      
      2.對復雜數據結構的排序  
       
      Array.prototype.each=function(f){for(var   i=0;i<this.length;i++)   f(this[i],i,this)}  
      function   showName(item){alert(item.name)};   //打印名字  
       
      var   arr=[  
                                {name:"bill",money:500},  
                                {name:"go_rush",money:400},  
                                {name:"dudu",money:9000}  
                          ];                                    
      //依次顯示   dudu,bill,go_rush   看來dudu是最有錢的,而我是最窮的  
      arr.sort(function(left,right){return   left.money>right.money?-1:1}).each(showName)    
       
        3.對表格的排序,這個話題我昨天和大家聊過了.      
      參見:  
      http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html  
       
        更復雜的表格排序(也是用Array的sort函數):    
      http://community.csdn.net/expert/Topicview2.asp?id=5174915  
         
       
        4.   Protype.js   中對   sort有一個構思非常巧妙的擴展,先看他的代碼  
       
      1       sortBy:   function(iterator)   {  
      2           return   this.collect(function(value,   index)   {  
      3               return   {value:   value,   criteria:   iterator(value,   index)};  
      4           }).sort(function(left,   right)   {  
      5               var   a   =   left.criteria,   b   =   right.criteria;  
      6               return   a   <   b   ?   -1   :   a   >   b   ?   1   :   0;  
      7           }).pluck('value');  
      8       },  
         
       
        這個   sortBy   允許傳入一個函數,   并把數組的每一個元素作為參數執行該函數,最后對函數返回的結果排序.  
      下面我來分解他的這個函數.  
      collect方法實際就是   map方法.相當于  
      Array.prototype.map=function(f){  
                    for(var   i=0;ret=[];i<this.length;i++)     ret[i]=f(this[i],i,this)  
                  return   ret  
      }  
       
        比如,現在    
      arr=[2,1,4,3]  
      iterator=function(x){return   x*x}  
       
      1-3行代碼就得到了這樣一個數組    
      [  
            {value:2,criteria:4},  
            {value:1,criteria:1},  
            {value:4,criteria:16},  
            {value:3,criteria:9}  
      ]  
       
      4-6行代碼就對數組按   criteria:進行排序,由小到大.排完得到  
      [  
            {value:1,criteria:1},  
            {value:2,criteria:4},  
            {value:3,criteria:9},  
            {value:4,criteria:16}  
      ]  
       
      第7行代碼最簡單了,取每個元素的value屬性,最終得到   [1,2,3,4]     實現對arr的sortBy(function...)排序

    posts - 2, comments - 2, trackbacks - 0, articles - 25

    Copyright © sunbaby

    free web counter
    free web counter 點擊發送消息給我
    主站蜘蛛池模板: 亚洲日韩在线观看| 亚洲bt加勒比一区二区| 亚洲av中文无码乱人伦在线观看 | 一本久久免费视频| 免费大黄网站在线观看| 美女视频黄a视频全免费网站色 | 亚洲精品美女久久久久| 久久精品国产亚洲AV天海翼| 在线A级毛片无码免费真人| 亚洲熟女乱色一区二区三区 | 亚洲精品国产福利片| 91免费人成网站在线观看18| 亚洲人成免费电影| 四虎影视免费在线| 香蕉视频免费在线播放| 在线a亚洲v天堂网2019无码| 国产免费无码一区二区 | 久久99亚洲综合精品首页| a级毛片免费高清视频| 妞干网免费视频在线观看| 亚洲AV无码一区二区三区久久精品| 岛国av无码免费无禁网站| 狠狠综合亚洲综合亚洲色| 久久久青草青青国产亚洲免观 | 久草福利资源网站免费| 亚洲精品人成电影网| 免费涩涩在线视频网| 亚洲日本在线免费观看| 成人久久免费网站| 亚洲手机中文字幕| 国产在线观看免费不卡| 亚洲私人无码综合久久网| 亚洲国产高清精品线久久| 爱丫爱丫影院在线观看免费| 亚洲乱码卡一卡二卡三| 亚洲国产a级视频| 5555在线播放免费播放| 在线观看亚洲网站| 亚洲va无码专区国产乱码| 99久久婷婷免费国产综合精品| 一本色道久久综合亚洲精品高清|