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 相关文章推荐
在父页面调用子页面的JS方法
Sep 29 Javascript
jquery实现弹出层效果实例
May 19 Javascript
JavaScript常用标签和方法总结
Sep 01 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
谈谈VUE种methods watch和compute的区别和联系
Aug 01 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
May 10 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
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
Python之父谈Python的未来形式
2016/07/01 Python
Python简易版停车管理系统
2019/08/12 Python
pandas数据处理进阶详解
2019/10/11 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
shell的种类有哪些
2015/04/15 面试题
外贸业务员求职信范文
2013/12/12 职场文书
英文留学推荐信范文
2014/01/25 职场文书
行政副总岗位职责
2014/02/23 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
赡养老人协议书
2014/04/21 职场文书
技术负责人任命书
2014/06/05 职场文书
惊天动地观后感
2015/06/10 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
对象析构函数__del__在Python中何时使用
2022/03/22 Python