javascript - 最有效地检查循环匹配

标签 javascript jquery loops if-statement

我有一个简单的设置来查找最高分。目标是对得分最高的人进行排序,然后给予前 3 名奖励积分。

问题:在下面的第二部分中,我将循环查看人员并检查谁获得了最高分。问题是我需要为每个名字执行 3 次。我目前设置循环的方式有效,但似乎非常多余。这是正确的方法吗?

   var allGrades = [
        {name: 'andrew', score: 80}, 
        {name: 'john', score: 90}, 
        {name: 'sam', score: 31}, 
        {name: 'frank', score: 50}, 
        {name: 'dave', score: 95},
        ]

    allGrades.sort(function(obj1, obj2) {
    return obj2.score - obj1.score;
     });

第二部分。给予得分前3名的人相应奖励50/25/15。

for (i = 1; i < 5; i++) {

if (allGrades[0].name == 'andrew'){
andrewGradeBonus = 50; 
if (allGrades[1].name == 'andrew'){
andrewGradeBonus = 25;
if (allGrades[2].name == 'andrew'){
andrewGradeBonus = 15;

if (allGrades[0].name == 'dave'){
daveGradeBonus = 50; 
if (allGrades[1].name == 'dave'){
daveGradeBonus = 25;
if (allGrades[2].name == 'dave'){
daveGradeBonus = 15;

继续所有名称...

最佳答案

您可以迭代成绩并增加实际分数:

const gradeBonuses = [50, 25, 15];
allGrades.sort((a, b) => b.score - a.score).forEach((grade, index) => {
    if (index < 3) {
        grade.score += gradeBonuses[index];
    }
});

如果您确实想要单独的奖励 Prop ,只需将 grade.score +=gradeBonuses[index]; 切换为

const bonusProp = `${grade.name.toLowerCase()}GradeBonus`
       grade[bonusProp] = gradeBonuses[index];

但是既然对象已经存储了名称,为什么还需要将该名称添加到奖励属性的名称中呢?

关于javascript - 最有效地检查循环匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260391/

相关文章:

jquery - 如何: Zend_Form processing via ajax

bash - 如何使文件名中的空格成为 bash while 循环中的条件?

r - 为什么这个 for 循环会出现 46 个错误?

javascript - 单击时在 youtube iframe 下隐藏一个 div

javascript - 通过单击周围的 td 来单击复选框

Javascript 连接字符串和变量来创建 url - 但不输出 "/"斜杠

javascript - 未经身份验证使用的每日限制超出了 Google Api 日历

javascript - 将 jquery 插件集成到 angular js 中

javascript - jQuery -> 在一个窗口中打开一个新的小窗口

linux - shell脚本ssh命令不起作用