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 相关文章推荐
dwr spring的集成实现代码
Mar 22 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
Jan 28 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
深入理解node exports和module.exports区别
Jun 01 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
很棒的vue弹窗组件
May 24 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 Javascript
vue-cli3搭建项目的详细步骤
Dec 05 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
JavaScript流程控制(循环)
Dec 06 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
vue登录注册及token验证实现代码
2017/12/14 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python 基础知识之字符串处理
2017/01/06 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
高中生毕业自我鉴定
2013/10/10 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
结婚纪念日感言
2015/08/01 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
mysql 获取时间方式
2022/03/20 MySQL