-3

假设您有一系列这样的子挑战:

subchallenges = [
    {name: 'score',
     result: 'gold'},
    {name: 'time',
     result: 'bronze'},
    ...and so on.... ]

你需要找到最终的分数,它正好等于所有子挑战中的最低分数。排名层次结构

['gold', 'silver', 'bronze', 'none'] 

所以在上面的示例数组中,如果它只包含那些子挑战对象,最终得分将等于铜牌。您认为最好的方法是什么?

4

2 回答 2

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;
}

编辑:修复了它,所以当所有挑战都是“无”时它会返回“无”而不是“黄金”

于 2013-06-28T14:35:07.053 回答
1

只需遍历数组:

var lowest = "gold";
for (var i = 0; i < subchallenges.length; i++){
    ...
}

使用跟踪当前最低分数lowest,如果它较低,则更新它。

于 2013-06-28T14:33:22.433 回答