Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

js 数组sort, 多条件排序。

就是10 2019-08-13 20:41:00 阅读数:11 评论数:0 点赞数:0 收藏数:0

Array.sort(); 

sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。

一般用法:(数组元素从小大进行排序)

 

var a = [9, 6, 5, 7, 11, 52, 15];
a.sort(function(return a-b;));

   sort()方法,接收了一个函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。

   1)当 a - b < 0  时, 则 a 元素排在 b 元素的前面。

   2) 当 a - b = 0 时, a , b 元素的位置不变。

   3) 当 a - b > 0 是, 则 b 元素排在 a 元素的前面。

 

----------------------------------------------------------------------------------------------------------------------

以上是针对单纯的整数数组,当数组的元素为对象时,则可能需要根据对象的属性进行排序,此时就会涉及到多条件排序。

var obj = {online:  true,  id: 123,  mes: 3}; //online表示是否在线, id:玩家ID,mes:消息条数;

如数组中的元素是obj对象,此时需要根据, online, id, mes 三个维度对数组进行排序。

需求如下:online为true排前面, id 小的排前面,mes>0的排在前面

直接上代码:

 function Obj(id, online, mes){
     this.id = id;
     this.online = online;
     this.mes = mes
 }
 
 function mysort(a ,b){
     //online 都为true
     if(a.online && b.online){
         //mes都 大于 0
         if(a.mes && b.mes){
             return a.id < b.id ? -1 : 1;
         }
         //mes都 等于 0
         else if(!a.mes && !b.mes){
             return a.id < b.id ? -1 : 1;
         }
         //mes 不同时为 0 
         else{
             return a.mes > b.mes ? -1 : 1;
         }
     }
     //online 都为false
     else if(!a.online && !b.online){
         if(a.mes && b.mes){
             return a.id < b.id ? -1 : 1;
         }
         else if(!a.mes && !b.mes){
             return a.id < b.id ? -1 : 1;
         }
         else{
             return a.mes > b.mes ? -1 : 1;
         }
     }
     //online 不同时为true
     else{
         return a.online > b.online ? -1 : 1;
     }
 }
 
 var arr = [];
 for(var i = 0; i < 10; i++){
     var id = parseInt(Math.random() * 10);
     var mes = parseInt(Math.random() * 10);
     if(id > 5){
         var online = true;
     }
     else var online = false;
     arr[i] = new Obj(id, online, mes);
 }
 console.table(arr);
 arr.sort(mysort);
 console.table(arr);

初始化的数组:

 

排序后的结果:

 

所以遇到多条件排序的需求时,先一级一级进行划分,最后再根据某个条件进行排序。

function Obj( id, online, mes){
this. id = id;
this. online = online;
this. mes = mes
}

function mysort( a , b){
//online 都为true
if( a. online && b. online){
//mes都 大于 0
if( a. mes && b. mes){
return a. id < b. id ? - : ;
}
//mes都 等于 0
else if(! a. mes && ! b. mes){
return a. id < b. id ? - : ;
}
//mes 不同时为 0
else{
return a. mes > b. mes ? - : ;
}
}
//online 都为false
else if(! a. online && ! b. online){
if( a. mes && b. mes){
return a. id < b. id ? - : ;
}
else if(! a. mes && ! b. mes){
return a. id < b. id ? - : ;
}
else{
return a. mes > b. mes ? - : ;
}
}
//online 不同时为true
else{
return a. online > b. online ? - : ;
}
}

var arr = [];
for( var i = ; i < ; i++){
var id = parseInt( Math. random() * );
var mes = parseInt( Math. random() * );
if( id > ){
var online = true;
}
else var online = false;
arr[ i] = new Obj( id, online, mes);
}
console. table( arr);
arr. sort( mysort);
console. table( arr);
版权声明
本文为[就是10]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/lyc10/p/11348419.html