分享一个用于数组或者对象的排序的函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序。
代码如下:
/**
* 排序数组或者对象
* 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对象数组排序函数及六个用法的全部叙述,希望大家喜欢。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“JavaScript对象数组排序函数及六个用法”评论...
更新日志
2025年10月29日
2025年10月29日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]