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 相关文章推荐
兼容Mozilla必须知道的知识。
Jan 09 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
jQuery增加与删除table列的方法
Mar 01 Javascript
js监听input输入框值的实时变化实例
Jan 26 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
Vue表情输入组件 微信face表情组件
Feb 11 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 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初学入门
2006/11/19 PHP
PHP版自动生成文章摘要
2008/07/23 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Django values()和value_list()的使用
2020/03/31 Python
介绍一下XMLHttpRequest对象
2012/02/12 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
校运会口号
2014/06/18 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
教师听课评语大全
2014/12/31 职场文书
会计试用期自我评价
2015/03/10 职场文书
成绩单家长意见
2015/06/03 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python