【问题标题】:My forEach looping in reverse order on my dictionary in javascript, why?我的 forEach 在我的 javascript 字典中以相反的顺序循环,为什么?
【发布时间】:2019-03-13 15:52:03
【问题描述】:

在我的程序中,我使用 和计算学生的成绩来获取学生的成绩。要检查他们得到的成绩,我已经在字典中列出了成绩数据,我想检查我的成绩是否大于某个成绩,如果不是,则给他们 A,如果没有,它将继续,直到找到合适的成绩。因此,我已将我的字典对象从最高等级到最低等级排列,因此一旦找到合适的等级停止并将等级打印给用户。由于某种原因,它从最低键对象循环到最高键,我将如何解决这个问题?从第一个键循环到最后一个键,不管它的值是什么。

var dict = {94: '"It is, A, excellent"', 90: '"It is, A-, great job"', 87: '"It is, B+, great"', 84: "It is, B, amazing", 80: "It is, B-, study little more", 77: "It is, C+, you could do better", 74: "It is, C", 70: "It is, C-", 67: "Is your grade, D+"}
 function gradeCheck(sum){
            var tex;
            Object.keys(dict).forEach( function(key){
                //console.log(key, dict[key]);
                /*if(sum>=key && (sum-key)<6 ){
                    tex = dict[key];
                    return tex;
                }*/
                if(sum > key){
                    tex = dict[key];
                    return tex;
                }
            });
        }

我评论了我的旧零件代码。

希望有人能帮忙,谢谢

【问题讨论】:

标签: javascript dictionary foreach


【解决方案1】:

因为 JS 对象不保留键的插入顺序。使用 MAP 而不是普通对象。

var dict = new Map();
dict.set(94, 'It is, A, excellent');
dict.set(90, 'It is, A-, great job');
dict.set(87, '"It is, B+, great"');

function gradeCheck(sum) {
    var tex;
    for (var [key, value] of dict) {
        if (sum > key) {
            tex = value;
            console.log(tex);
            return tex;
        }
    }

} 

【讨论】:

    【解决方案2】:

    使用数组

    var grades = [
      { grade: 94, message: 'It is, A, excellent' },
      { grade: 90, message: 'It is, A-, great job' },
      { grade: 87, message: 'It is, B+, great' },
      { grade: 84, message: 'It is, B, amazing' },
      { grade: 80, message: 'It is, B-, study little more' },
      { grade: 77, message: 'It is, C+, you could do better' },
      { grade: 74, message: 'It is, C' },
      { grade: 70, message: 'It is, C-' },
      { grade: 67, message: 'Is your grade, D+' }
    ];
    
    function gradeCheck(sum) {
     return grades.find(g => g.grade < sum).message;
    }
    
    console.log(gradeCheck(88));
    
    console.log(gradeCheck(75));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2016-07-25
      • 1970-01-01
      • 2013-01-04
      • 2019-11-24
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多