Как использовать вложенный оператор If-Else в For-L oop? [Javascript] - PullRequest
0 голосов
/ 05 августа 2020

Для практического упражнения мне нужно написать функцию, которая будет oop проверять ответы на тесты, чтобы проверить, включает ли ответ определенную строку.

checkForPlagarism (submissionsArray, string) принимает в массиве и строке. Предполагается, что l oop пройдёт через все объекты в массиве и проверит, содержат ли они какую-нибудь строку. Но, похоже, он возвращает "false" только после первого l oop. Когда я, например, передаю «Метафазу» в качестве строки, она возвращает «истина». Если я передам точный ответ на любые другие вопросы в массиве, он вернет «false», даже если должен вернуть «true». Вот мой REPL: https://repl.it/@clamquarter / Take-Home-Science-Quiz # index. js

Что я делаю не так?

const submissions = [
      {
        question: 'What is the phase where chromosomes line up in mitosis?',
        response: 'Metaphase',
        isCorrect: true,
        isEssayQuestion: false
      }
    //and so on...
    ]
    
function checkForPlagiarism(submissionsArray, string) {
  for (let i = 0; i < submissionsArray.length; i++) {
    if (submissionsArray[i].response.includes(string)) {
    return true
    } 
      else {
        return false
      } 
  }
  
}

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Операторы возврата завершат работу для l oop. Здесь происходит то, что ваш l oop проверяет submissionsArray[0] и оценивает его как true или false и выходит из l oop. checkForPlagiarism возвращает все, что submissionsArray[0] оценивается.

Чтобы исправить это, удалите условие else и получите checkForPlagiarism return false, когда l oop завершится.

Вот что это выглядит так:

function checkForPlagiarism(submissionsArray, string) {
  for (let i = 0; i < submissionsArray.length; i++) {
    if (submissionsArray[i].response.includes(string)) {
      return true
    }
  }
  return false
}
0 голосов
/ 05 августа 2020

"Вы не должны возвращать false, пока не завершится for l oop." - @ Поинти

...