【问题标题】:Why indexOf in javascript not working?为什么javascript中的indexOf不起作用?
【发布时间】:2023-03-25 23:13:01
【问题描述】:

我不确定我在这里做错了什么。我使用 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] 中,则mutation 应返回 false,否则返回 true。

【问题讨论】:

  • 你到底想做什么?
  • 我刚刚将你的代码粘贴到 JS 控制台中,我也成功了
  • 如果您使用的是 IE8 及以上版本,则不支持 .indexOf()。参考链接:stackoverflow.com/questions/3629183/…
  • 我正在使用 chrome 和 firefox。
  • @splucena 查看我编辑的答案。那里概述了您的代码的问题。你有一个 off by 1 错误和一个否定的 indexOf 检查。

标签: javascript


【解决方案1】:

您的代码不起作用,因为当您说:

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

这意味着:“我找到了一个 f”,但你把它当作“我没有找到一个 f”。

在你的情况下,如果你找到一个'f',你想返回 false,但你返回的是 true。翻转你的真假案例:

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

另外你的 for 循环是错误的,因为 x 从 0 开始,所以你需要去

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

现在您的代码可以按照您的意愿运行了。

【讨论】:

  • 或者更好:return !res.indexOf("f")
  • @Macmee 你说得对,我在第一次使用 indexOf 时就已经确定了自己的想法,并希望它在我寻找 false 时返回 true。
【解决方案2】:

刚刚编辑了您的代码。点击&lt;p&gt;查看:

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>

【讨论】:

    【解决方案3】:

    如果你稍微简化一下逻辑,那就更容易检查了:

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

    感谢Leon 的更正。

    【讨论】:

    • 使用true &amp;&amp; condition有什么好处吗?
    • @LeonAdler 与什么相比?
    • 这是有效的。你能发现我的代码有什么问题吗?
    • condition - return arr[0].indexOf(x) &gt;= 0相比
    • @LeonAdler 哈哈!当然,谢谢大佬。那是我的愚蠢。
    【解决方案4】:

    我尽量不要碰你的逻辑,错误是:

    • 您正在尝试与数组 [0] 上的所有字符进行比较,而不仅仅是第一个。
    • 如果您发现数组[0] 上的第一个字符等于一个字符,您应该返回true。

    正确代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多