если условия для викторины - PullRequest
1 голос
/ 28 октября 2019

Я работаю над тестом, который, в зависимости от данного ответа, должен вернуть строку (вверх, вниз или средний), которую я добавляю после этого в className в моем компоненте, чтобы показать правильный значок.

Может кто-нибудь сказать мне, что я делаю не так в этой логике? К этому моменту оба аргумента (answer и id) становятся нормальными, и я могу их прочитать. Но операторы if просто игнорируют их и переходят непосредственно к оператору else (который всегда дает «down»).

Это логика, которую я написал:

export const checkAnswer = (answer, id) => {
if ((answer === 'Nein') && (id === '0' || id === '3' || id === '5')) {
  return 'up';
} else if ((answer === 'Ja') && (id === '1' || id === '2' || id === '4' || id === '6')){
  return 'up';
} else if (answer === 'Weiß nicht') {
  return 'medium';
} else {
  return 'down';
}

Я ценю любую помощь.

Спасибо за вашу помощь, ребята. Кроме того, вот код, в котором я передаю аргументы:

questions.map(question => {
    if (checkAnswer(question.answer, question.id) === 'up') {
      correctAnswers += 1;
      debugger
    }
    if (
      (question.category === 'Effektivkosten' || 'Rentenfaktor') &&
      question.answer === 'Nein'
    ) {
      correctAnswers += 2;
    }

    if (question.winner && question.answer === 'Ja') {
      winnerAnswer = true;
    }
  });

А вот как все вопросы структурированы:

{
    id: 0,
    category: 'Effektivkosten',
    text: 'Sind die Effektivkosten höher als 1,5%?',
    shortText: 'Über 1,5% p.A.',
    answer: '',
    options: [
      {
        id: 1,
        name: 'Ja'
      },
      {
        id: 2,
        name: 'Nein'
      },
      {
        id: 3,
        name: 'Weiß nicht'
      }
    ]
  },

А вот таблица, где я читаю «строку»"и добавьте его в className:

 <table>
                  <tbody>
                    {questions.map((question, index) => (
                      <tr key={question.id}>
                        <td className="name">
                          <strong>{question.category}:</strong>
                        </td>
                        <td className="shortName">{question.shortText}</td>
                        <td>
                          <i
                            className={`icon-thumb icon-thumb__${checkAnswer(
                              question.answer,
                              question.id
                            )}`}
                          />
                        </td>
                      </tr>
                    ))}
                  </tbody>
                </table>

Ответы [ 3 ]

0 голосов
/ 28 октября 2019

Как указано в комментариях, вы используете строгое сравнение, чтобы проверить, является ли идентификатор '1', '2', '3', но ваши идентификаторы на самом деле являются числами (согласно структуре вопроса, которую вы разместили).

При строгом сравнении, если ваши входные данные являются числами, вы должны сравнивать их с числами, а не со строками.

То есть

export const checkAnswer = (answer, id) => {
if ((answer === 'Nein') && (id === 0 || id === 3 || id === 5)) {
  return 'up';
} else if ((answer === 'Ja') && (id === 1 || id === 2 || id === 4 || id === 6)){
  return 'up';
} else if (answer === 'Weiß nicht') {
  return 'medium';
} else {
  return 'down';
}
0 голосов
/ 28 октября 2019

Возможно, вы передаете идентификатор как целое число, и вы строго проверяете, соответствует ли оно строке (5 против '5') - Драгош Поль Маринеску 16 минут назад

0 голосов
/ 28 октября 2019

Я бы использовал include для проверки нескольких идентификаторов

export const checkAnswer = (answer, id) => {
if ((answer === 'Nein') && ([0,3,5].includes(id))) {
   return 'up';
} else if ((answer === 'Ja') && ( [1,2,4,6].includes(id) )){
  return 'up';
} else if (answer === 'Weiß nicht') {
  return 'medium';
} else {
  return 'down';
}

. Вы также можете использовать [1,2,4,6] .include (parseInt (id)) для преодоления проверки типов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...