为什么indexOf在JavaScript中不起作用?

我不确定我在这里做错了什么。 我使用indexOf的第一个实例工作得很好,但是当我第二次使用它时,它没有返回我期待的结果。

function mutation(arr) {
    //return arr;
    res = "";
    for (var x=0; x<arr[1].split("").length; x++) {
        if (arr[0].indexOf(arr[1].split("")[x]) !== -1) {
            res += "t";
        } else {
            res += "f";
        }
    }
    // res = ttt
    if (res.indexOf("f") !== -1) {
        return true;
    } else {
        return false;
    }
}

mutation(["hello", "hey"]);
// this returns true instead of false
mutation(["floor", "loo"]); 
// returns false instead of true

如果来自arr [1]的元素不存在于arr [0]中,那么应该返回false,否则返回true。


你的代码不工作,因为当你说:

res.indexOf("f") != -1

这意味着:“我找到了一个f”,但是你对它的处理就好像它意味着“我找不到f”。

在你的情况下,如果你想找到一个'f',但你想返回true,那么你想返回false。 翻转你的真实和错误的情况:

if (res.indexOf("f") != -1) {
   return false;
 } else {
   return true;
 }

另外你的for循环是错误的,因为x从0开始,所以你需要去<length而不是<=你的字符串的长度。

for (var x=0; x < arr[1].split("").length; x++) {

现在你的代码可以按照你的想法工作。


刚刚编辑你的代码。 点击<p>查看:

function mutation(arr) {
  //return arr;
  res = "";
  for (var x=0; x< arr[1].split("").length; x++) {
    res += arr[0].indexOf(arr[1].split("")[x]) > -1 ? 't' : 'f';
  }
 return res.indexOf('f') > -1;
}

$('p').click(function(){
  alert(mutation(["hello", "hey"]));
  alert(mutation(["floor", "loo"]));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click me</p>

如果你简化了一下逻辑,那么检查起来就容易一些:

function mutation(arr) {
  return arr[1].split('').reduce(function(res, x) {
    return arr[0].indexOf(x) >= 0;
  }, true);
}

感谢莱昂的更正。

链接地址: http://www.djcxy.com/p/18967.html

上一篇: Why indexOf in javascript not working?

下一篇: what is the alternate function for indexOf for string in IE8?