Способ выбора текстовой метки на основе числового результата?

Я часто сталкиваюсь с проблемой сообщения результатов викторины. Javascript дает мне хорошие способы для получения объективной оценки (например, 10 из 20 правильных ответов), но я не уверен, что лучше всего предоставить субъективную метку этого результата. Например, "Вы набрали 10 из 20 правильных ответов, это средний результат".

На сегодняшний день я делаю это простым способом:

if (score > 15) {
    answerText = "excellent";
} else if (score > 10) {
    answerText = "average";
} else if (score > 5) {
    answerText = "below average";
} else {
   answerText = "poor";
}

Интересно, хотя, есть ли лучший способ приблизиться к этому. Это switch Скажите лучше?

Советы и мнения приветствуются!

1 ответ

Решение

Это прекрасный способ подойти к этому. Вы можете использовать обратное switch Заявление также, но кроме возможного эффекта новизны, оно не предлагает ничего другого:

switch (true) {
    case score > 15:
        answerText = "excellent";
        break;
    case score > 10:
        answerText = "average";
        break;
    // etc
}

Если вы хотите что-то более дисциплинированное и обслуживаемое, вы можете создать массив пороговых значений и проверить каждое из них в порядке убывания, например:

// This could also be an array of objects, but let's keep the PoC simple
var outcomes = [
    [15, "excellent"],
    [10, "average"],
    // ...
    [0, "poor"]
];

for (var i = 0; i < outcomes.length; ++i) {
    if (outcomes[i][0] <= score) {
        answerText = outcomes[i][1];
        break;
    }
}
Другие вопросы по тегам