我有一个表示曲棍球排名数据的对象数组:
[
{
name: "Russia",
points: 10,
iihf: 1
},
{
name: "USA",
points: 10,
iihf: 7
},
{
name: "Slovakia",
points: 8,
iihf: 6
}
]
我想将数据从最高分降序排列。如果两个或多个团队共享相同的积分,则必须使用下一个维度对它们进行精细排序,即 IIHF 排名(升序)。对此有优雅的解决方案吗?
谢谢。
此外:如果您知道 iihf 分数的上限,您还可以预先计算一个仅用于排序的复合分数。复合分数可能如下所示:
obj.cscore = obj.points * 10000 + obj.iihf;
之后,你可以在 cscore 之后排序:
arr.sort(function(a,b) {
return a.cscore - b.cscore;
});
如果您不想污染您的原始对象,您可以使用临时 map (如 here 所述):
var map = arr.map(function (e, i) {
return {index: i, cscore: e.points * 1000 + e.iihf};
});
map.sort(function (a,b) {
return a.cscore - b.cscore;
});
var result = map.map(function(e){
return arr[e.index]
});
FIDDLE