排序多个属性的对象的数组 [英] Sort an array of objects by multiple properties
本文介绍了排序多个属性的对象的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有对象,像这样的数组:
VAR一个= [
{ID:1,比分:1,isCut:假的,地下城与勇士:假},
{ID:2,比分:2,isCut:假的,地下城与勇士:假},
{ID:3,比分:3,isCut:假的,地下城与勇士:假},
{ID:4,比分:4,isCut:假的,地下城与勇士:假},
{ID:5,得分:5,isCut:真的,DNF:真正},
{ID:6,得分:6,isCut:真的,DNF:假},
{ID:7,得分:7,isCut:真的,DNF:假},
{ID:8,得分:8,isCut:真的,DNF:假},
{ID:9,得分:9,isCut:真的,DNF:假},
{ID:10,比分:0,isCut:假的,地下城与勇士:假},
{ID:11,比分:-1,isCut:假的,地下城与勇士:假},
{ID:12,比分:-2,isCut:假的,地下城与勇士:真正},
{ID:13,比分:-3,isCut:假的,地下城与勇士:假},
{ID:14,比分:-4,isCut:假的,地下城与勇士:假},
{ID:15,比分:-5,isCut:假的,地下城与勇士:假},
{ID:16分:10,isCut:真的,DNF:假}
];
我需要组并通过以下标准对数组进行排序:
- 如果
DNF
为真,对象进入底部;所有的DNF
-objects应该按分数进行排序 - 如果
isCut
为真,目的去底部,但上面的DNF
S;所有的isCut
-objects应该按分数进行排序 - 其余部分应该由
评分
排序,如果分数相等,由ID
解决方案
(更新)下面是你在评论中提及了问题的答案。
a.sort(功能(A,B){
如果(a.dnf!= b.dnf){
返回a.dnf? 1:-1;
}
如果((a.dnf&放大器;!&放大器; b.dnf)及&放大器;!a.isCut = b.isCut){
返回a.isCut? 1:-1;
}
如果(a.score!= b.score){
返回b.score - a.score; //下降
}
返回b.id - a.id; //下降
});
结果:
[
{ID:4,分数:4,isCut:假的,地下城与勇士:虚假} //剩下的:为了通过分数,身份证
{ID:3,分数:3,isCut:假的,地下城与勇士:虚假} //
{ID:2,得分:2,isCut:假的,地下城与勇士:虚假} //
{ID:1,分数:1,isCut:假的,地下城与勇士:虚假} //
{ID:10,得分:0,isCut:假的,地下城与勇士:虚假} //
{ID:11,得分: - 1,isCut:假的,地下城与勇士:虚假} //
{ID:13,得分 - 3isCut:假的,地下城与勇士:虚假} //
{ID:14,得分 - 4isCut:假的,地下城与勇士:虚假} //
{ID:15,得分 - 5isCut:假的,地下城与勇士:虚假} //
{ID:16,得分:10,isCut:真实的地下城与勇士:虚假} // isCut:为了按分数,身份证
{ID:9,得分:9,isCut:真实的地下城与勇士:虚假} //
{ID:8,得分:8,isCut:真实的地下城与勇士:虚假} //
{ID:7,分数:7,isCut:真实的地下城与勇士:虚假} //
{ID:6,分数:6,isCut:真实的地下城与勇士:虚假} //
{ID:5,分数:5,isCut:真实的地下城与勇士:真正} //地下城与勇士:为了按分数,身份证
{ID:12,得分 - 2,isCut:假的,地下城与勇士:真正} //
]
I have an array of objects like this:
var a = [
{ id: 1, score: 1, isCut: false, dnf: false },
{ id: 2, score: 2, isCut: false, dnf: false },
{ id: 3, score: 3, isCut: false, dnf: false },
{ id: 4, score: 4, isCut: false, dnf: false },
{ id: 5, score: 5, isCut: true, dnf: true },
{ id: 6, score: 6, isCut: true, dnf: false },
{ id: 7, score: 7, isCut: true, dnf: false },
{ id: 8, score: 8, isCut: true, dnf: false },
{ id: 9, score: 9, isCut: true, dnf: false },
{ id: 10, score: 0, isCut: false, dnf: false },
{ id: 11, score: -1, isCut: false, dnf: false },
{ id: 12, score: -2, isCut: false, dnf: true },
{ id: 13, score: -3, isCut: false, dnf: false },
{ id: 14, score: -4, isCut: false, dnf: false },
{ id: 15, score: -5, isCut: false, dnf: false },
{ id: 16, score: 10, isCut: true, dnf: false }
];
I need to group and sort the array by the following criteria:
- if
dnf
is true, object goes to bottom; alldnf
-objects should be sorted by score - if
isCut
is true, object goes to bottom, but abovednf
s; allisCut
-objects should be sorted by score - rest should be sorted by
score
, and if the scores are equal, byid
解决方案
(Updated) Here's the answer of question you mentioned in comment.
a.sort(function(a, b) {
if (a.dnf != b.dnf) {
return a.dnf ? 1 : -1;
}
if (!(a.dnf && b.dnf) && a.isCut != b.isCut) {
return a.isCut ? 1 : -1;
}
if (a.score != b.score) {
return b.score - a.score; // descending
}
return b.id - a.id; // descending
});
Result:
[
{"id":4,"score":4,"isCut":false,"dnf":false}, // the rest: order by score, id
{"id":3,"score":3,"isCut":false,"dnf":false}, //
{"id":2,"score":2,"isCut":false,"dnf":false}, //
{"id":1,"score":1,"isCut":false,"dnf":false}, //
{"id":10,"score":0,"isCut":false,"dnf":false}, //
{"id":11,"score":-1,"isCut":false,"dnf":false}, //
{"id":13,"score":-3,"isCut":false,"dnf":false}, //
{"id":14,"score":-4,"isCut":false,"dnf":false}, //
{"id":15,"score":-5,"isCut":false,"dnf":false}, //
{"id":16,"score":10,"isCut":true,"dnf":false}, // isCut: order by score, id
{"id":9,"score":9,"isCut":true,"dnf":false}, //
{"id":8,"score":8,"isCut":true,"dnf":false}, //
{"id":7,"score":7,"isCut":true,"dnf":false}, //
{"id":6,"score":6,"isCut":true,"dnf":false}, //
{"id":5,"score":5,"isCut":true,"dnf":true}, // dnf: order by score, id
{"id":12,"score":-2,"isCut":false,"dnf":true} //
]
这篇关于排序多个属性的对象的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文