JavaScript对象数组排序函数及六个用法


Posted in Javascript onDecember 23, 2015

分享一个用于数组或者对象的排序的函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序。

代码如下:

/**
  * 排序数组或者对象
  * by Jinko
  * date --
  * @param object 数组或对象
  * @param subkey 需要排序的子键, 该参数可以是字符串, 也可以是一个数组
  * @param desc 排序方式, true:降序, false|undefined:升序
  * @returns {*} 返回排序后的数组或者对象
  *
  * 注意: 对于对象的排序, 如果使用console.log打印对象的显示可能和排序结果不一致,
  *  其键会被浏览器以字母顺序排序显示,但在for循环中则为正确的排序顺序
  */
 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) {
         //数组排序
         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": 
   }
 };
 //根据session_online字段升序排序
 data = sort_object(data, 'session_online');
 for(var k in data) {
   console.log(data[k]);
 }
 console.log('------------------');
 //根据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": ,
   }
 ];
 //根据cpuhz_use字段进行排序
 data = sort_object(data, 'cpuhz_use');
 console.log(data);

 用法3:

var data = [,,,,,,,];
 //对一维数组进行升序排序
 data = sort_object(data);
 console.log(data);
 //对一维数组进行降序排序
 data = sort_object(data, null, true);
 console.log(data);

 用法4:

var data = {'a':, 'b':, 'c':, 'd':};
 //对对象进行升序排序
 data = sort_object(data);
 //对对象进行降序排序
 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的值为基础进行升序排序
 data = sort_object(data, ['l', 'l']);
 for(var k in data) {
   console.log(data[k].l);
 }

 用法6:

var data = [
   [
     {
       "a": 
     },
     ,
   ],
   [
     {
       "a": 
     },
     ,
   ],
   [
     {
       "a": 
     },
     ,
   ]
 ];
 //对数组的元素以下标为的元素的键名为a的值为基础进行升序排序
 data = sort_object(data, [,'a']);
 for(var k = ; k<data.length; k++) {
   console.log(data[k]);
 }
 console.log('---------------------');
 //对数组的元素以下标为的元素的值为基础进行升序排序
 data = sort_object(data, []); // 等价于 data = sort_object(data, );
 for(var k = ; k<data.length; k++) {
   console.log(data[k]);
 }

以上内容是小编给大家分享的JavaScript对象数组排序函数及六个用法的全部叙述,希望大家喜欢。

Javascript 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
别了 JavaScript中的isXX系列
Aug 01 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
Jan 14 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
AngularJs 终极购物车(实例讲解)
Nov 08 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
angularJS开发注意事项
May 26 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
Aug 13 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
ZK中使用JS读取客户端txt文件内容问题
Nov 07 Javascript
JavaScript中的函数(二)
Dec 23 #Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 #Javascript
js实现正则匹配中文标点符号的方法
Dec 23 #Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
Dec 23 #Javascript
node.js入门实例helloworld详解
Dec 23 #Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 #Javascript
AngularJS 日期格式化详解
Dec 23 #Javascript
You might like
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
Yii框架登录流程分析
2014/12/03 PHP
php截取字符串函数分享
2015/02/02 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
PHP 文件上传限制问题
2019/09/01 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
JavaScript中的集合及效率
2010/01/08 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
简述JS控制台的使用
2018/07/15 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Windows下安装Scrapy
2018/10/17 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
士力架广告词
2014/03/20 职场文书
Python打包为exe详细教程
2021/05/18 Python
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android