Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Как избавиться от каскада switch case

Есть викторина. В ней пользователь угадывает один из 3-х вариантов. Каждый вариант имеет свой вес:
Вариант 1: 20 очков Вариант 2: 30 очков Вариант 3: 50 очков
Если игрок отгадывает вариант, то получает весь вес. Если нет, то только его часть, распределение которой строго регламентировано.
Ответ игрока || Правильный ответ || Очки 1 1 100% 2 1 75% 3 1 50% 1 2 75% 2 2 100% 3 2 75% 1 3 25% 2 3 50% 3 3 100%
Можно запросто написать что-нибудь в духе:
calcRateScore: function(fact, user) {
var rateScore = 0;
switch (fact) { case 1: switch (user) { case 1: rateScore = 20; break; case 2: rateScore = 20 * 0.75; break; case 3: rateScore = 20 * 0.5; break; } break; case 2: switch (user) { case 1: rateScore = 30 * 0.75; break; case 2: rateScore = 30; break; case 3: rateScore = 30 * 0.75; break; } break; case 3: switch (user) { case 1: rateScore = 50 * 0.25; break; case 2: rateScore = 50 * 0.5; break; case 3: rateScore = 50; break; } break; }
return rateScore; }
Но выглядит это просто ужасно. Подскажите, как избавиться от этих switch / case (желательно от всех)?


Ответ

var answers = [ null, { weight: 20, fractions: [0, 1, 0.75, 0.5] }, { weight: 30, fractions: [0, 0.75, 1, 0.75] }, { weight: 50, fractions: [0, 0.25, 0.5, 1] } ];
calcRateScore: function(fact, user) {
var rateScore = 0;
if (answers[fact] && answers[fact].fractions[user]) { rateScore = answers[fact].weight * answers[fact].fractions[user]; }
return rateScore; }

Комментариев нет:

Отправить комментарий