我有一个包含类似于此数据的数组:
var committees = [
{
committee: "Apple Com",
userRole: "Member",
membersNum: 11
},
{
committee: "Orange Com",
userRole: "Member",
membersNum: 9
}, {
committee: "Banana Com",
userRole: "",
membersNum: 13
}, {
committee: "Strawberry Com",
userRole: "Vice President",
membersNum: 15
}, {
committee: "Lemon Com",
userRole: "",
membersNum: 13
},
{
committee: "Mango Com",
userRole: "Chair",
membersNum: 11
},
]
我希望它们首先按照用户角色进行排序,然后再按委员会进行排序。“委员会”字段将始终具有一个值,而“用户角色”字段有时将为null。
当前,我为实现此目的正在将数组分为两个数组。第一个数组将仅返回User Role不为null的项目。第二个数组返回用户角色为null的项目。接下来,我按委员会升序排列每个数组,然后将它们连接起来。因此逻辑如下:
//get committees user is member of and committees user is not member of
var memberOf = [];
var nonMemberOf = [];
for(var i=0; i<committees.length; i++){
if(committees[i].userRole){
memberOf.push(committees[i]);
} else {
nonMemberOf.push(committees[i]);
}
}
memberOf.sort(function(a,b){return (a.committee > b.committee) ? 1 : -1; });
nonMemberOf.sort(function(a,b){return (a.committee > b.committee) ? 1 : -1; });
var allComs = memberOf.concat(nonMemberOf);
我已经花了3个多小时来阅读并尝试实现我在此处的某些帖子中所阅读的内容:
我认为,有一种更好的方式可以做我正在做的事情,但无法弄清楚。如果有人可以在这里说些什么,我将非常感谢。
PS我不是要有人为我做这件事,我想了解如何做。对于那些可以帮助的人,请先感谢!
尝试sort
按每个比较项之间的布尔值差异进行比较userRole
,或者按一下得出的结果0
(即,如果两者都起作用或都没有作用),则按committee
s进行排序:
var committees=[{committee:"Apple Com",userRole:"Member",membersNum:11},{committee:"Orange Com",userRole:"Member",membersNum:9},{committee:"Banana Com",userRole:"",membersNum:13},{committee:"Strawberry Com",userRole:"Vice President",membersNum:15},{committee:"Lemon Com",userRole:"",membersNum:13},{committee:"Mango Com",userRole:"Chair",membersNum:11},]
committees.sort((a, b) => (
Boolean(b.userRole) - Boolean(a.userRole)
|| a.committee.localeCompare(b.committee)
));
console.log(committees);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句