В моей программе я получаю оценки от студентов, использующих и вычисляющих их оценки. Чтобы проверить, какую оценку они получают, я перечислил данные оценок в словаре, и я хочу проверить, больше ли моя оценка, чем определенная оценка, дайте им 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.info(key, dict[key]);
/*if (sum>=key && (sum-key)<6 ){
tex = dict[key];
return tex;
}*/
if (sum > key){
tex = dict[key];
return tex;
}
});
}
Я прокомментировал свой старый код детали.
Надеюсь, кто-то может помочь, спасибо
Я не думаю, что использование чисел в качестве ключей к объекту - лучший способ. Я бы использовал массив.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте массив
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.info(gradeCheck(88));
console.info(gradeCheck(75));Поскольку объекты 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.info(tex);
return tex;
}
}
}
Связанный: Вводит ли ES6 четко определенный порядок перечисления свойств объекта?. В этом случае порядок ключей, возвращаемых через
Object.keys, не определен четко, и если вам нужно рассчитывать на конкретный порядок, вы должны сами отсортировать массив перед его повторением.