【问题标题】:trouble compreending how to stop the loop if true如果为真,无法理解如何停止循环
【发布时间】:2022-01-24 09:49:12
【问题描述】:

这是我在这里的第一篇文章,我正在尝试做一个 freecodecamp 练习。

这是我的代码:

function mutation(arr) {
  let newArr = arr[0].toLowerCase();
  let arrNew = arr[1].toLowerCase();
  let test = newArr.split(' ');
  let newTest = arrNew.split(' ');

  for (let i=0; i < test.length; i++) {
    for (let j=0; j < newTest.length; j++) {
      if (newTest[j] === test[i]) {
        return true;
      }
    }
  }
  return false;
}

mutation(["hello", "hey"]);

练习是“突变”,如果数组上的第一个字符串包含第二个字符串的所有字母,我需要返回 true。 我试图了解当 if 语句为真时如何停止循环并保存它。

在此先感谢,如果我没有正确解释自己,请见谅。

【问题讨论】:

  • 你能用一些例子解释一下吗?一个必须返回 true,另一个必须返回 false。谢谢
  • "return" 停止循环。如果它继续运行,这意味着 newTest[j] === test[i] 总是返回 false,并且该块永远不会执行。
  • @FS-GSW 当然,对不起。以下是想要的结果:mutation(["hello", "hey"]) 应该返回 false。 mutation(["hello", "Hello"]) 应该返回 true。
  • 好的,mutation( ["hello", "hellooooo"] ) 应该返回 true 还是 false ?
  • @FS-GSW 它应该返回 true,因为“mutation(["Mary", "Aarmy"]) 应该返回 true。”所以它必须有所有的字母

标签: javascript for-loop if-statement


【解决方案1】:

如果您想使用示例代码中的循环,这是一种非常冗长的方法:

function mutation(arr) {
  let hasAllLetters = true;
  let stringToCompare = arr[0].toLowerCase();
  let referenceString = arr[1].toLowerCase();
  let hasCurrentLetter;
  
  for (let i=0; i < referenceString.length; i++) {
    hasCurrentLetter = false;
    
    for (let j=0; j < stringToCompare.length; j++) {
        
      if (referenceString[i] === stringToCompare[j]) {
        hasCurrentLetter = true;
        
        // break from the second loop as soon as the condition is satisfied
        break;
      }
    }
        
    if(!hasCurrentLetter){
      hasAllLetters = false;
      // as soon as there is at least one letter which does not exist from the reference string
      // break from the second loop and exit yielding the result false
      break;
    }
  }
  
  return hasAllLetters;
}

let res;

res = mutation(["hello", "goll"]);
console.log("res: ", res); // false

res = mutation(["hello", "olhh"]);
console.log("res: ", res); // true

【讨论】:

  • 它工作得很好,我试图了解你所做的范围界定是如何工作的。我想这是我必须努力的下一步。谢谢!
  • @Shoqolate 如果回答了您的问题,请将其标记为已接受;)
  • 如果您对代码还有其他问题,请不要犹豫
【解决方案2】:

关于您的问题

return 将退出函数并因此退出循环。
由此我们知道,如果您的函数返回 false,则条件 newTest[j] === test[i] 从未得到验证。

练习提示

您可以假设第一个单词包含第二个单词的所有字母,就像您现在所做的那样迭代并检查您是否找到反例!

【讨论】:

    【解决方案3】:

    以下代码应该对您有所帮助。

    function mutation(arr) {
        let newArr = arr[0].toLowerCase();
        let arrNew = arr[1].toLowerCase();
      
        for (let i=0; i < newArr.length; i++) {
            if (arrNew.indexOf(newArr[i]) == -1) {
                return false;
            }
        }
        return true;
    }
    
    mutation(["hello", "hey"]);
    

    没有必要使用数组。在 JS 中,字符串就像数组一样工作,我们可以使用“for”循环。

    【讨论】:

    • Shoqolate : 这个代码好多了...你可以试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多