JavaScript对象数组排序函数及六个用法
分享一个用于数组或者对象的排序的函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序。
代码如下:
/**
*排序数组或者对象
*byJinko
*date--
*@paramobject数组或对象
*@paramsubkey需要排序的子键,该参数可以是字符串,也可以是一个数组
*@paramdesc排序方式,true:降序,false|undefined:升序
*@returns{*}返回排序后的数组或者对象
*
*注意:对于对象的排序,如果使用console.log打印对象的显示可能和排序结果不一致,
*其键会被浏览器以字母顺序排序显示,但在for循环中则为正确的排序顺序
*/
functionsort_object(object,subkey,desc)
{
varis_array=false;
if(Object.prototype.toString.call(object)==='[objectArray]'){
is_array=true;
}
if(is_array){
varkeys={length:object.length};
}else{
if(typeof(Object.keys)=='function'){
varkeys=Object.keys(object);
}else{
varkeys=[];
for(varkeyinkeys){
keys.push(key);
}
}
}
for(vari=;i<keys.length;i++){
for(varj=i+;j<keys.length;j++){
if(is_array){
//数组排序
if(Object.prototype.toString.call(subkey)==='[objectArray]'){
varvali=object[i];
varvalj=object[j];
for(varsi=;si<subkey.length;si++){
vali=vali[subkey[si]];
valj=valj[subkey[si]];
}
}else{
if((!subkey&&subkey!==)||subkey==''&&object.sort){
varvali=object[i];
varvalj=object[j];
}else{
varvali=object[i][subkey];
varvalj=object[j][subkey];
}
}
if(desc){
if(valj>vali){
vartmp=object[i];
object[i]=object[j];
object[j]=tmp;
}
}else{
if(valj<vali){
vartmp=object[i];
object[i]=object[j];
object[j]=tmp;
}
}
}else{
//对象排序
varobi=object[keys[i]];
varobj=object[keys[j]];
if(Object.prototype.toString.call(subkey)==='[objectArray]'){
varvali=obi;
varvalj=obj;
for(varsi=;si<subkey.length;si++){
vali=vali[subkey[si]];
valj=valj[subkey[si]];
}
}else{
if((!subkey&&subkey!==)||subkey==''&&object.sort){
varvali=obi;
varvalj=obj;
}else{
varvali=obi[subkey];
varvalj=obj[subkey];
}
}
if(desc){
if(valj>vali){
vartmp=keys[i];
keys[i]=keys[j];
keys[j]=tmp;
}
}else{
if(valj<vali){
vartmp=keys[i];
keys[i]=keys[j];
keys[j]=tmp;
}
}
}//is!array
}
}
if(is_array){
returnobject;
}else{
varsorted={};
for(vari=;i<keys.length;i++){
sorted[keys[i]]=object[keys[i]];
}
returnsorted;
}
}//sort_object
用法如下:
用法1:
vardata={
"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(varkindata){
console.log(data[k]);
}
console.log('------------------');
//根据session_offline字段降序排序
data=sort_object(data,'session_offline',true);
for(varkindata){
console.log(data[k]);
}
用法2:
vardata=[
{
"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:
vardata=[,,,,,,,]; //对一维数组进行升序排序 data=sort_object(data); console.log(data); //对一维数组进行降序排序 data=sort_object(data,null,true); console.log(data);
用法4:
vardata={'a':,'b':,'c':,'d':};
//对对象进行升序排序
data=sort_object(data);
//对对象进行降序排序
data=sort_object(data,'',true);
for(varkindata){
console.log(k,':',data[k]);
}
用法5:
vardata={
"l_":{
"l":{
"l":
}
},
"l_":{
"l":{
"l":
}
},
"l_":{
"l":{
"l":
}
},
"l_":{
"l":{
"l":
}
}
};
//对对象元素的l下的l的值为基础进行升序排序
data=sort_object(data,['l','l']);
for(varkindata){
console.log(data[k].l);
}
用法6:
vardata=[
[
{
"a":
},
,
],
[
{
"a":
},
,
],
[
{
"a":
},
,
]
];
//对数组的元素以下标为的元素的键名为a的值为基础进行升序排序
data=sort_object(data,[,'a']);
for(vark=;k<data.length;k++){
console.log(data[k]);
}
console.log('---------------------');
//对数组的元素以下标为的元素的值为基础进行升序排序
data=sort_object(data,[]);//等价于data=sort_object(data,);
for(vark=;k<data.length;k++){
console.log(data[k]);
}
以上内容是小编给大家分享的JavaScript对象数组排序函数及六个用法的全部叙述,希望大家喜欢。