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

Я часто сталкиваюсь с проблемой сообщения результатов викторины. 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 лучше?

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


person theJBRU    schedule 03.01.2014    source источник
comment
лучше в плане чего?   -  person Felix Kling    schedule 03.01.2014
comment
Кажется, это полностью основано на мнении, чего не хочет StackOverflow. Возможно, для этого лучше подойдет codereview.stackexchange.com.   -  person jfriend00    schedule 03.01.2014
comment
Ах-ха. Ранее не сталкивался с codereview.stackexchange. Я позабочусь о том, чтобы переместить это туда.   -  person theJBRU    schedule 08.01.2014


Ответы (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;
    }
}
person Jon    schedule 03.01.2014
comment
Дисциплинированное и ремонтопригодное решение соответствует тому, что я искал. Учитывая, что я сталкиваюсь с этим шаблоном нечасто, я хочу что-то, что я могу повторно использовать с минимальной настройкой, и похоже, что это может помочь. Спасибо, Джон! - person theJBRU; 08.01.2014