分享一个用于数组或者对象的排序的函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序。代码如下: 1 /** 2 * 排序数组或者对象 3 * by Jinko 4 * date 2015-12-23 5 * @param object 数 ...
分享一个用于数组或者对象的排序的函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序。
代码如下:
1 /** 2 * 排序数组或者对象 3 * by Jinko 4 * date 2015-12-23 5 * @param object 数组或对象 6 * @param subkey 需要排序的子键, 该参数可以是字符串, 也可以是一个数组 7 * @param desc 排序方式, true:降序, false|undefined:升序 8 * @returns {*} 返回排序后的数组或者对象 9 * 10 * 注意: 对于对象的排序, 如果使用console.log打印对象的显示可能和排序结果不一致, 11 * 其键会被浏览器以字母顺序排序显示,但在for循环中则为正确的排序顺序 12 */ 13 function sort_object(object, subkey, desc) 14 { 15 var is_array = false; 16 17 if(Object.prototype.toString.call(object) === '[object Array]') { 18 is_array = true; 19 } 20 21 if(is_array) { 22 var keys = {length:object.length}; 23 } else { 24 var keys = Object.keys(object); 25 } 26 27 for(var i=0; i<keys.length; i++) { 28 for(var j=i+1; j<keys.length; j++) { 29 30 if(is_array) { 31 //数组排序 32 if(Object.prototype.toString.call(subkey) === '[object Array]') { 33 var vali = object[i]; 34 var valj = object[j]; 35 36 for(var si=0; si<subkey.length; si++) { 37 vali = vali[ subkey[si] ]; 38 valj = valj[ subkey[si] ]; 39 } 40 } else { 41 if((!subkey && subkey !== 0) || subkey == '' && object.sort) { 42 var vali = object[i]; 43 var valj = object[j]; 44 } else { 45 var vali = object[i][subkey]; 46 var valj = object[j][subkey]; 47 } 48 } 49 50 if(desc) { 51 if(valj > vali) { 52 var tmp = object[i]; 53 object[i] = object[j]; 54 object[j] = tmp; 55 } 56 } else { 57 if(valj < vali) { 58 var tmp = object[i]; 59 object[i] = object[j]; 60 object[j] = tmp; 61 } 62 } 63 } else { 64 //对象排序 65 var obi = object[ keys[i] ]; 66 var obj = object[ keys[j] ]; 67 68 if(Object.prototype.toString.call(subkey) === '[object Array]') { 69 var vali = obi; 70 var valj = obj; 71 72 for(var si=0; si<subkey.length; si++) { 73 vali = vali[ subkey[si] ]; 74 valj = valj[ subkey[si] ]; 75 } 76 } else { 77 if((!subkey && subkey !== 0) || subkey == '' && object.sort) { 78 var vali = obi; 79 var valj = obj; 80 } else { 81 var vali = obi[subkey]; 82 var valj = obj[subkey]; 83 } 84 } 85 86 if(desc) { 87 if(valj > vali) { 88 var tmp = keys[i]; 89 keys[i] = keys[j]; 90 keys[j] = tmp; 91 } 92 } else { 93 if(valj < vali) { 94 var tmp = keys[i]; 95 keys[i] = keys[j]; 96 keys[j] = tmp; 97 } 98 } 99 }//is!array100 }101 }102 103 if(is_array) {104 return object;105 } else {106 var sorted = {};107 108 for(var i=0; i<keys.length; i++) {109 sorted[ keys[i] ] = object[ keys[i] ];110 }111 112 return sorted;113 }114 } //sort_object
原标题:Javascript 排序数组或对象
关键词:JavaScript
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。