【问题标题】:How Do I Use a Nested If-Else Statement within a For-Loop? [Javascript]如何在 For 循环中使用嵌套的 If-Else 语句? [Javascript]
【发布时间】:2020-11-25 17:47:09
【问题描述】:

对于一个带回家的练习,我必须编写一个函数来循环测试答案以检查答案是否包含某个字符串。

checkForPlagarism(submissionsArray, string) 接受一个数组和一个字符串。它应该遍历数组中的所有对象并检查它们是否包含一些字符串。但它似乎只在第一个循环后返回“false”。例如,当我将“Metaphase”作为字符串传递时,它返回“true”。如果我传入数组中任何其他问题的确切响应,即使它应该返回“true”,它也会返回“false”。这是我的 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
      } 
  }
  
}

【问题讨论】:

  • for 循环完成之后之前,您不应该return false
  • 顺便说一句,请更改函数名称以反映结果,例如isPlagiarismcheck... 很好,但是你如何解释它的结果呢?
  • @NinaScholz 如果由我决定,我会的。但这是一个带回家的学校作业,所以我不能更改函数名称。
  • @Pointy 就是这样!太感谢了。我想这更像是我从 Swift 那里学到的一个习惯。那,我通常不使用嵌套在循环中的 if-else。再次!谢谢!如果你给出官方答案,我会投票!

标签: javascript for-loop nested-loops


【解决方案1】:

返回语句将退出一个 for 循环。这里发生的是您的循环检查submissionsArray[0] 并评估为truefalse 并退出循环。 checkForPlagiarism 返回任何 submissionsArray[0] 评估结果。

要解决此问题,请删除 else 条件并在循环完成时让 checkForPlagiarism 返回 false

看起来是这样的:

function checkForPlagiarism(submissionsArray, string) {
  for (let i = 0; i < submissionsArray.length; i++) {
    if (submissionsArray[i].response.includes(string)) {
      return true
    }
  }
  return false
}

【讨论】:

    【解决方案2】:

    “在 for 循环完成之前,您不应返回 false。” - @Pointy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      相关资源
      最近更新 更多