Превращение условий If / Else в цикл for? - PullRequest
0 голосов
/ 28 января 2019

Новый разработчик, в настоящее время проходящий курсы, работает над проектом игровой викторины с Javascript & Jquery.У меня есть длинное условие if else, ищущее, могу ли я вставить цикл for для сжатия кода.или есть ли другой способ его укоротить?У меня всего 8 вопросов к игре.

if (question1 == "Red Hot Chili Peppers") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question2 == "Rage Against The Machine") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question3 == "Nirvana") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question4 == "Sublime") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question5 == "The Black Keys") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question6 == "Dave Grohl") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question7 == "Pearl Jam") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

    if (question8 == "Big Gigantic") {
        userCorrect ++;

    }else {
        userIncorrect ++;

    }

}

Игра работает;однако, если это возможно, мы собираемся сократить это.

Ответы [ 4 ]

0 голосов
/ 28 января 2019

Начните с создания массива правильных ответов.Затем сохраните все ответы пользователя в другом массиве.Инициализируйте счетчик correctCount равным 0 и используйте простой for loop для циклического перемещения по списку, сравнивая каждое значение с другим.Кроме того, поскольку incorectCount может быть легко вычислено, вам не нужно считать его отдельно.

const correctAnswers = [
  "Red Hot Chili Peppers",
  "Rage Against The Machine",
  "Nirvana",
  "Sublime"
];

const userAnswers = [
  "Red Hot Chili Peppers",
  "Rage Against The Machine",
  "Nirvana",
  "Metallica"
];

let correctCount = 0;

for (let i = 0; i < correctAnswers.length; i++) {
  if (correctAnswers[i] === userAnswers[i]) {
    correctCount++;
  }
}

console.log("Correct answers:" + correctCount);
console.log("Incorrect answers:" + (correctAnswers.length - correctCount));

0 голосов
/ 28 января 2019

Храните правильные ответы в одном массиве, а догадки пользователя - в другом.Затем зациклите правильные ответы и сравните их с соответствующим ответом из массива догадок пользователя.

Это может быть реализовано несколькими различными способами, но, поскольку вы только учитесь, я сохраняю это довольно простым,Он опирается на первый массив, зацикленный с помощью .forEach(), а затем использует троичный оператор , чтобы решить, следует ли увеличить счет.

const correctAnswers = [
  "Red Hot Chili Peppers",
  "Rage Against The Machine",
  "Nirvana"
];

let userAnswers = [
  "Red Hot Chili Peppers",
  "Green Day",
  "Nirvana"
];

let numberCorrect = 0;

// Loop over the right answers
correctAnswers.forEach(function(answer, index){
  // Increment the score if the user's answer matches the correct answer.
  numberCorrect = userAnswers[index] === answer ? numberCorrect + 1 : numberCorrect;
});

console.log("You got " + numberCorrect + " out of " + correctAnswers.length + " correct.");
0 голосов
/ 28 января 2019

Если вы сохраняете que корректно answers в массиве, а пользователь responses в другом, где индексы массива сопоставляют ответы с ответами, вы можете использовать цикл для сравнения и подсчета правильных.

const answers = [
    "Red Hot Chili Peppers",
    "Rage Against The Machine",
    "Nirvana",
    "Sublime",
    "The Black Keys",
    "Dave Grohl",
    "Pearl Jam",
    "Big Gigantic"
];

let userResponses = [
    "Red Hot Chili Peppers",
    "Pink Floyd",
    "Nirvana",
    "Sublime",
    "The Black Keys",
    "Bob Marley",
    "Pearl Jam",
    "Artic Monkeys"
];

let goods = 0;

userResponses.forEach((x, idx) =>
{
    goods += (x === answers[idx]);
});

console.log("Corrects: " + goods);
console.log("Incorrects: " + (answers.length - goods));
0 голосов
/ 28 января 2019

Вместо этого используйте массив правильных ответов (и множество вопросов):

const correctAnswers = [
  "Red Hot Chili Peppers",
  "Rage Against The Machine",
  "Nirvana"
  // ...
];

// ...
// have userAnswers be an array of answers

const userCorrect = correctAnswers
  .filter((correctAnswer, i) => userAnswers[i] === correctAnswer)
  .length;
const userIncorrect = correctAnswers.length - userCorrect;

Если вы знакомы с reduce, вы можете отменить необходимость проверки .length вend, reduce немного больше подходит для преобразования массива в одно выражение:

const userCorrect = correctAnswers
  .reduce((a, correctAnswer, i) => a + userAnswers[i] === correctAnswer, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...