js数组sort,多条件排序。
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的排在前⾯
直接上代码:
1function Obj(id, online, mes){
2this.id = id;
5 }
6
7function mysort(a ,b){
8//online 都为true
line && b.online){
10//mes都⼤于 0
s && b.mes){
12return a.id < b.id ? -1 : 1;
13        }
14//mes都等于 0
15else if(!a.mes && !b.mes){
16return a.id < b.id ? -1 : 1;
17        }
18//mes 不同时为 0
19else{
s > b.mes ? -1 : 1;
21        }
22    }
23//online 都为false
24else if(!a.online && !b.online){
s && b.mes){
26return a.id < b.id ? -1 : 1;
27        }
28else if(!a.mes && !b.mes){
29return a.id < b.id ? -1 : 1;
30        }
31else{
s > b.mes ? -1 : 1;
33        }
34    }
35//online 不同时为true
36else{
line > b.online ? -1 : 1;
38    }
39 }
40
41var arr = [];
42for(var i = 0; i < 10; i++){
43var id = parseInt(Math.random() * 10);
44var mes = parseInt(Math.random() * 10);
45if(id > 5){
46var online = true;
47    }
48else var online = false;
49    arr[i] = new Obj(id, online, mes);
50 }
51 console.table(arr);
52 arr.sort(mysort);
53 console.table(arr);
初始化的数组:
排序后的结果:
所以遇到多条件排序的需求时,先⼀级⼀级进⾏划分,最后再根据某个条件进⾏排序。function Obj(id, online, mes){
this.id = id;
}
function mysort(a ,b){
//online 都为true
line && b.online){
//mes都⼤于 0
s && 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{
s > b.mes ? -1 : 1;
}
}
//online 都为false
else if(!a.online && !b.online){
s && b.mes){
return a.id < b.id ? -1 : 1;
}
else if(!a.mes && !b.mes){ return a.id < b.id ? -1 : 1;
}
else{
s > b.mes ? -1 : 1;
}
}
//online 不同时为true
else{
line > 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){
sort函数 jsvar online = true;
}
else var online = false;
arr[i] = new Obj(id, online, mes);
}
console.table(arr);
arr.sort(mysort);
console.table(arr);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。