【问题标题】:Why is my while loop not iterating through completely?为什么我的 while 循环没有完全迭代?
【发布时间】:2016-03-10 23:54:50
【问题描述】:

所以这是我下面的代码,这个程序的目标是检查第二个字符串的字母是否可以在第一个字符串中找到。但是我发现了我没有的问题,它的价值增加了​​。所以循环只经过一次。所以这个程序在它找到的第一个字母处结束并返回true。如何让 i 增加以便遍历字符串的每个字符?

function mutation(arr) {
  var str = arr[1];
  str = str.toLowerCase().split("");
  var i = 0;
  while (i < arr.length) {
    if (arr[0].indexOf(str[i]) > -1) {
      //return  arr[i].indexOf(str[i], i);
      return true;
    } else {
      return false;
    }
    i++;
  }
}

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

【问题讨论】:

  • return 将从您的函数中退出,而不是从 while 循环中退出。该函数应该返回什么/何时返回?
  • 我的猜测是,当您找到匹配项时,您不想 return true;,而是希望将布尔值设置为 true,只要满足您的条件并在最后返回该布尔值
  • 你会立即从函数中返回。相反,您可能只想在未找到字母 时返回 false,然后在末尾返回 true 以指示已找到所有字母。
  • 你在增量之前返回。
  • @cmbuckley 只有在第二个字符串中找到的所有字符都可以在第一个字符串中找到时,该函数才应返回 true

标签: javascript loops while-loop


【解决方案1】:

这可能吗?

function mutation(arr) {
  var str = arr[1];
  str = str.toLowerCase().split("");
  // iterating an array screams "for loop"
  for (var i=0; i < str.length; i++) {
    // if the letter was not found exit immediately
    if (arr[0].indexOf(str[i]) == -1) return false;
  }
  // since it didn't exit before, all the letters must have been found.
  return true;
}

【讨论】:

    【解决方案2】:
    function mutation(arr) {
      var base = arr[0],
          str = arr[1].toLowerCase().split(''),
          i = 0,
          match = true;
      while (i < str.length) {
        // if any target letter is not in base, return false
        if(base.indexOf(str[i]) === -1){
            return false;
        }
      }
      // otherwise they were all in, so return true
      return true;
    }
    mutation(["hello", "hey"]);
    

    【讨论】:

      【解决方案3】:

      完全不同的技术。

      此函数在第二个字符串中将第一个字符串中的所有字母替换为空格。如果长度为零,则找到所有字母。

      function mutation(arr) {
        return arr[1].replace(new RegExp("[" + arr[0] + "]", "g"), "").length == 0;
      }
      

      【讨论】:

      • PS 如果您在数组中使用除简单字母/数字以外的任何其他内容,这将完全崩溃。
      猜你喜欢
      • 2016-03-03
      • 2021-09-07
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 2016-01-31
      相关资源
      最近更新 更多