假设您有一系列子挑战:
subchallenges = [
{name: 'score',
result: 'gold'},
{name: 'time',
result: 'bronze'},
...and so on.... ]
您需要找到最终得分,这等于任何子挑战中的最低得分。排名层次结构
['gold', 'silver', 'bronze', 'none']
所以在上面的示例数组中,如果它只包含那些子挑战对象,那么最终得分将等于青铜。您认为最好的方法是什么?
答案 0 :(得分:5)
你应该为你的字符串评级添加一些整数值:
var ratings = {
'gold' : 3,
'silver' : 2,
'bronze' : 1,
'none' : 0
}
然后循环应对挑战很容易:
function getRating(subchallenges)
{
var result = 'gold';
var lowestRate = 3;
var numRates = 0;
for(var i=0;i<subchallenges.length;i++)
{
var rate = ratings[subchallenges[i].result];
if(rate > 0 && rate < lowestRate)
{
lowestRate = rate;
result = subchallenges[i].result;
numRates++;
}
}
if(numRates == 0) return 'none';
return result;
}
编辑:修复它以便当所有挑战都是'无'时它将返回'无'而不是'黄金'
答案 1 :(得分:1)
只需遍历数组:
var lowest = "gold";
for (var i = 0; i < subchallenges.length; i++){
...
}
使用lowest
跟踪当前的最低分数,如果它更低,则更新它。