JavaScript對象數(shù)組排序函數(shù)及六個(gè)用法
分享一個(gè)用于數(shù)組或者對象的排序的函數(shù)。該函數(shù)可以以任意深度的數(shù)組或者對象的值作為排序基數(shù)對數(shù)組或的元素進(jìn)行排序。
代碼如下:
/** * 排序數(shù)組或者對象 * by Jinko * date -- * @param object 數(shù)組或?qū)ο? * @param subkey 需要排序的子鍵, 該參數(shù)可以是字符串, 也可以是一個(gè)數(shù)組 * @param desc 排序方式, true:降序, false|undefined:升序 * @returns {*} 返回排序后的數(shù)組或者對象 * * 注意: 對于對象的排序, 如果使用console.log打印對象的顯示可能和排序結(jié)果不一致, * 其鍵會被瀏覽器以字母順序排序顯示,但在for循環(huán)中則為正確的排序順序 */ 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) { //數(shù)組排序 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": } }; //根據(jù)session_online字段升序排序 data = sort_object(data, 'session_online'); for(var k in data) { console.log(data[k]); } console.log('------------------'); //根據(jù)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": , } ]; //根據(jù)cpuhz_use字段進(jìn)行排序 data = sort_object(data, 'cpuhz_use'); console.log(data);
用法3:
var data = [,,,,,,,]; //對一維數(shù)組進(jìn)行升序排序 data = sort_object(data); console.log(data); //對一維數(shù)組進(jìn)行降序排序 data = sort_object(data, null, true); console.log(data);
用法4:
var data = {'a':, 'b':, 'c':, 'd':}; //對對象進(jìn)行升序排序 data = sort_object(data); //對對象進(jìn)行降序排序 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的值為基礎(chǔ)進(jìn)行升序排序 data = sort_object(data, ['l', 'l']); for(var k in data) { console.log(data[k].l); }
用法6:
var data = [ [ { "a": }, , ], [ { "a": }, , ], [ { "a": }, , ] ]; //對數(shù)組的元素以下標(biāo)為的元素的鍵名為a的值為基礎(chǔ)進(jìn)行升序排序 data = sort_object(data, [,'a']); for(var k = ; k<data.length; k++) { console.log(data[k]); } console.log('---------------------'); //對數(shù)組的元素以下標(biāo)為的元素的值為基礎(chǔ)進(jìn)行升序排序 data = sort_object(data, []); // 等價(jià)于 data = sort_object(data, ); for(var k = ; k<data.length; k++) { console.log(data[k]); }
以上內(nèi)容是小編給大家分享的JavaScript對象數(shù)組排序函數(shù)及六個(gè)用法的全部敘述,希望大家喜歡。
- js使用Array.prototype.sort()對數(shù)組對象排序的方法
- JS實(shí)現(xiàn)json對象數(shù)組按對象屬性排序操作示例
- js對象數(shù)組按屬性快速排序
- JS實(shí)現(xiàn)根據(jù)數(shù)組對象的某一屬性排序操作示例
- js中的數(shù)組對象排序分析
- JavaScript對象數(shù)組如何按指定屬性和排序方向進(jìn)行排序
- JS實(shí)現(xiàn)給數(shù)組對象排序的方法分析
- javascript 數(shù)組排序與對象排序的實(shí)例
- js 根據(jù)對象數(shù)組中的屬性進(jìn)行排序?qū)崿F(xiàn)代碼
- JavaScript對象數(shù)組排序?qū)嵗椒\析
- JS深入學(xué)習(xí)之?dāng)?shù)組對象排序操作示例
相關(guān)文章
javascript之典型高階函數(shù)應(yīng)用介紹二
在前一篇文章javascript之典型高階函數(shù)中主要實(shí)現(xiàn)了幾個(gè)典型的functional函數(shù),文章最后也提出了疑問,為啥那樣的實(shí)現(xiàn)與F#之類的函數(shù)式語言“不太一樣”呢?今天來試試更“函數(shù)式”的實(shí)現(xiàn)2013-01-0110行原生JS實(shí)現(xiàn)文字無縫滾動(dòng)(超簡單)
下面小編就為大家分享一篇10行原生JS實(shí)現(xiàn)文字無縫滾動(dòng)的效果,特別簡單,具有很好的參考價(jià)值,希望對大家有所幫助2018-01-01js判斷復(fù)選框是否選中及選中個(gè)數(shù)的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猨s判斷復(fù)選框是否選中及選中個(gè)數(shù)的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05基于Bootstrap的后臺管理面板 Bootstrap Metro Dashboard
這篇文章主要介紹了基于Bootstrap的后臺管理面板:Bootstrap Metro Dashboard,對Bootstrap的后臺管理面板感興趣的小伙伴們可以參考一下2016-06-06