最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript對象數(shù)組排序函數(shù)及六個(gè)用法

 更新時(shí)間:2015年12月23日 14:48:55   投稿:mrr  
本文給大家分享一個(gè)用于數(shù)組或者對象的排序的函數(shù)。該函數(shù)可以以任意深度的數(shù)組或者對象的值作為排序基數(shù)對數(shù)組或的元素進(jìn)行排序

分享一個(gè)用于數(shù)組或者對象的排序的函數(shù)。該函數(shù)可以以任意深度的數(shù)組或者對象的值作為排序基數(shù)對數(shù)組或的元素進(jìn)行排序。

代碼如下:

 /**
  * 排序數(shù)組或者對象
  * by Jinko
  * date --
  * @param object 數(shù)組或?qū)ο?
  * @param subkey 需要排序的子鍵, 該參數(shù)可以是字符串, 也可以是一個(gè)數(shù)組
  * @param desc 排序方式, true:降序, false|undefined:升序
  * @returns {*} 返回排序后的數(shù)組或者對象
  *
  * 注意: 對于對象的排序, 如果使用console.log打印對象的顯示可能和排序結(jié)果不一致,
  *  其鍵會(huì)被瀏覽器以字母順序排序顯示,但在for循環(huán)中則為正確的排序順序
  */
 function sort_object(object, subkey, desc)
 {
   var is_array = false;
   if(Object.prototype.toString.call(object) === '[object Array]') {
     is_array = true;
   }
   if(is_array) {
     var keys = {length:object.length};
   } else {
     if(typeof(Object.keys) == 'function') {
       var keys = Object.keys(object);
     } else{
       var keys = [];
       for(var key in keys) {
         keys.push(key);
       }
     }
   }
   for(var i=; i<keys.length; i++) {
     for(var j=i+; j<keys.length; j++) {
       if(is_array) {
         //數(shù)組排序
         if(Object.prototype.toString.call(subkey) === '[object Array]') {
           var vali = object[i];
           var valj = object[j];
           for(var si=; si<subkey.length; si++) {
             vali = vali[ subkey[si] ];
             valj = valj[ subkey[si] ];
           }
         } else {
           if((!subkey && subkey !== ) || subkey == '' && object.sort) {
             var vali = object[i];
             var valj = object[j];
           } else {
             var vali = object[i][subkey];
             var valj = object[j][subkey];
           }
         }
         if(desc) {
           if(valj > vali) {
             var tmp = object[i];
             object[i] = object[j];
             object[j] = tmp;
           }
         } else {
           if(valj < vali) {
             var tmp = object[i];
             object[i] = object[j];
             object[j] = tmp;
           }
         }
       } else {
         //對象排序
         var obi = object[ keys[i] ];
         var obj = object[ keys[j] ];
         if(Object.prototype.toString.call(subkey) === '[object Array]') {
           var vali = obi;
           var valj = obj;
           for(var si=; si<subkey.length; si++) {
             vali = vali[ subkey[si] ];
             valj = valj[ subkey[si] ];
           }
         } else {
           if((!subkey && subkey !== ) || subkey == '' && object.sort) {
             var vali = obi;
             var valj = obj;
           } else {
             var vali = obi[subkey];
             var valj = obj[subkey];
           }
         }
         if(desc) {
           if(valj > vali) {
             var tmp = keys[i];
             keys[i] = keys[j];
             keys[j] = tmp;
           }
         } else {
           if(valj < vali) {
             var tmp = keys[i];
             keys[i] = keys[j];
             keys[j] = tmp;
           }
         }
       }//is!array
     }
   }
   if(is_array) {
     return object;
   } else {
     var sorted = {};
     for(var i=; i<keys.length; i++) {
       sorted[ keys[i] ] = object[ keys[i] ];
     }
     return sorted;
   }
 } //sort_object 

用法如下:

用法1: 

 var data = {
   "a": {
     "session_offline": ,
     "session_online": ,
     "session_count": 
   },
   "b": {
     "session_offline": ,
     "session_online": ,
     "session_count": 
   },
   "c": {
     "session_offline": ,
     "session_online": ,
     "session_count": 
   },
   "d": {
     "session_offline": ,
     "session_online": ,
     "session_count": 
   }
 };
 //根據(jù)session_online字段升序排序
 data = sort_object(data, 'session_online');
 for(var k in data) {
   console.log(data[k]);
 }
 console.log('------------------');
 //根據(jù)session_offline字段降序排序
 data = sort_object(data, 'session_offline', true);
 for(var k in data) {
   console.log(data[k]);
 } 

 用法2:

var data = [
   {
     "cpu": ,
     "cpuhz": ,
     "cpuhz_use": ,
   },
   {
     "cpu": ,
     "cpuhz": ,
     "cpuhz_use": ,
   },
   {
     "cpu": ,
     "cpuhz": ,
     "cpuhz_use": ,
   },
   {
     "cpu": ,
     "cpuhz": ,
     "cpuhz_use": ,
   }
 ];
 //根據(jù)cpuhz_use字段進(jìn)行排序
 data = sort_object(data, 'cpuhz_use');
 console.log(data); 

 用法3:

 var data = [,,,,,,,];
 //對一維數(shù)組進(jìn)行升序排序
 data = sort_object(data);
 console.log(data);
 //對一維數(shù)組進(jìn)行降序排序
 data = sort_object(data, null, true);
 console.log(data); 

 用法4:

 var data = {'a':, 'b':, 'c':, 'd':};
 //對對象進(jìn)行升序排序
 data = sort_object(data);
 //對對象進(jìn)行降序排序
 data = sort_object(data, '', true);
 for(var k in data) {
   console.log(k, ':', data[k]);
 } 

 用法5:

 var data = {
   "l_": {
     "l": {
       "l": 
     }
   },
   "l_": {
     "l": {
       "l": 
     }
   },
   "l_": {
     "l": {
       "l": 
     }
   },
   "l_": {
     "l": {
       "l": 
     }
   }
 };
 //對對象元素的l下的l的值為基礎(chǔ)進(jìn)行升序排序
 data = sort_object(data, ['l', 'l']);
 for(var k in data) {
   console.log(data[k].l);
 } 

 用法6:

var data = [
   [
     {
       "a": 
     },
     ,
   ],
   [
     {
       "a": 
     },
     ,
   ],
   [
     {
       "a": 
     },
     ,
   ]
 ];
 //對數(shù)組的元素以下標(biāo)為的元素的鍵名為a的值為基礎(chǔ)進(jìn)行升序排序
 data = sort_object(data, [,'a']);
 for(var k = ; k<data.length; k++) {
   console.log(data[k]);
 }
 console.log('---------------------');
 //對數(shù)組的元素以下標(biāo)為的元素的值為基礎(chǔ)進(jìn)行升序排序
 data = sort_object(data, []); // 等價(jià)于 data = sort_object(data, );
 for(var k = ; k<data.length; k++) {
   console.log(data[k]);
 }

以上內(nèi)容是小編給大家分享的JavaScript對象數(shù)組排序函數(shù)及六個(gè)用法的全部敘述,希望大家喜歡。

相關(guān)文章

  • 微信小程序的動(dòng)畫效果詳解

    微信小程序的動(dòng)畫效果詳解

    本文主要介紹了微信小程序動(dòng)畫效果的實(shí)現(xiàn)方法與原理解析。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 老生常談Bootstrap媒體對象

    老生常談Bootstrap媒體對象

    下面小編就為大家?guī)硪黄仙U凚ootstrap媒體對象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化詳解

    js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化詳解

    這篇文章主要介紹了js中實(shí)現(xiàn)字符串和數(shù)組的相互轉(zhuǎn)化,感興趣的小伙伴們可以參考一下
    2016-01-01
  • js播放wav文件(源碼)

    js播放wav文件(源碼)

    如何用JS播放wav文件,理論上用js在網(wǎng)頁里嵌入一個(gè)window播放器的插件,可以播放的。,不過通用性不是很好,IE下可以用,感興趣的朋友可以參考下哈本文
    2013-04-04
  • javascript開發(fā)實(shí)現(xiàn)貪吃蛇游戲

    javascript開發(fā)實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了javascript開發(fā)實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • JavaScript中保留兩位小數(shù)的方法總結(jié)

    JavaScript中保留兩位小數(shù)的方法總結(jié)

    這篇文章主要把相關(guān)保留兩位小數(shù)的方法總結(jié)了一下,不同的場景用不同的方法,即用即取,文中的示例代碼講解詳細(xì),?感興趣的小伙伴可以了解一下
    2023-06-06
  • JS關(guān)鍵字球狀旋轉(zhuǎn)效果的實(shí)例代碼

    JS關(guān)鍵字球狀旋轉(zhuǎn)效果的實(shí)例代碼

    這篇文章主要介紹了JS關(guān)鍵字球狀旋轉(zhuǎn)效果的實(shí)例代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • Typescript中extends關(guān)鍵字的基本使用

    Typescript中extends關(guān)鍵字的基本使用

    extends表示具體的泛型類型只能是object類型,某個(gè)變量如果能斷言成object類型[變量as object],那么這個(gè)變量的類型符合T extends object,下面這篇文章主要給大家介紹了關(guān)于Typescript中extends關(guān)鍵字基本使用的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 終于解決了IE8不支持?jǐn)?shù)組的indexOf方法

    終于解決了IE8不支持?jǐn)?shù)組的indexOf方法

    今天,測試報(bào)過來一個(gè)js bug, 在IE8下有個(gè)js錯(cuò)誤,但是在其它瀏覽器下(Firefox, Chrome, IE9)下面都很正常。后來調(diào)試發(fā)現(xiàn)原因是在IE8下,js數(shù)組沒有indexOf方法。
    2013-04-04
  • 學(xué)習(xí)javascript面向?qū)ο?實(shí)例講解面向?qū)ο筮x項(xiàng)卡

    學(xué)習(xí)javascript面向?qū)ο?實(shí)例講解面向?qū)ο筮x項(xiàng)卡

    這篇文章主要介紹了面向?qū)ο筮x項(xiàng)卡實(shí)現(xiàn)方法,幫助大家更好地學(xué)習(xí)javascript面向?qū)ο螅信d趣的小伙伴們可以參考一下
    2016-01-01

最新評論

泰和县| 江陵县| 永胜县| 庆元县| 杨浦区| 澄江县| 榆树市| 普格县| 通州市| 独山县| 临猗县| 琼海市| 太保市| 密山市| 大悟县| 海城市| 宁河县| 延津县| 潜江市| 清镇市| 茶陵县| 侯马市| 宣威市| 通榆县| 勐海县| 神木县| 兴仁县| 吴川市| 濉溪县| 昭通市| 仪征市| 拉萨市| 基隆市| 资兴市| 大邑县| 抚远县| 鸡泽县| 乌鲁木齐市| 镇康县| 日照市| 裕民县|