使用 indexOf() Javascript 迭代时代码中的特定错误

specific bug in code when iterating using indexOf() Javascript

我一直在经历 FreeCodeCamp 的 Bonfire 算法挑战,在这个特殊的挑战中,我们得到了两个参数,并被要求使用 indexOf() 将第二个参数的字符串中的所有字符与第一个参数进行匹配,如果第二个参数包含第一个参数中不存在的字母,则函数应该 return false.

使用我在这里写的函数,我通过了他们使用的所有测试参数,除了他们通过的时候:

    mutation("hello", "hey");

即使我在其他地方尝试 运行 这个函数,用上面的参数调用这个函数仍然 return 正确,但它应该 return 错误。

function mutation(arr) {

  var arr0 = arr[0].toLowerCase();
  var arr1 = arr[1].toLowerCase().split(''); //breaks characters into an array

  for (var i = 0, length = arr1.length; i < length; i++) {

    var check = arr0.indexOf(arr1[i]); // each element in arr1 is checked
    if (check === -1) {                // against arr0
        return false;
    } 
    return true;
  }
}

mutation(["hello", "hey"]); //returns true, but I can't find out know why

将其移出循环:

return true;

所以在它后面的大括号之后。

这是因为只有检查了所有字符才能知道结果是否为真。正如您现在所拥有的那样,for 循环实际上从不循环,它总是在第一次迭代时 returns。

  function mutation(arr) {
  for (var i = 0; i < arr[1].length; i++){
    if (arr[0].toLowerCase().indexOf(arr[1][i].toLowerCase()) == -1)
      return false;
    }
      return true;
  }