You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用indexOf()结合for循环实现数组字符包含校验时遇问题求助

问题分析与修复方案

嘿,我一眼就看到你代码里的问题了——你的for循环在第一次迭代就直接return了,根本没检查完第二个字符串里的所有字符!

比如你测试的mutation(["hello", "hey"]),第二个字符串的第一个字符是h,hello里确实有这个字符,所以代码直接返回true,但完全没去检查后面的e和y——而hello里根本没有y,正确结果应该是false才对。

具体来说,你这段代码的问题点:

  • 循环里的return first.indexOf(second[i]) !== -1 ? true : false;这行逻辑错了:只要第一个字符匹配就立刻返回true,如果第一个不匹配就返回false,完全没遍历完所有需要检查的字符。
  • 另外,i没有用var/let声明,会变成全局变量,这也是个容易踩的小坑。

给你修正后的代码:

function mutation(arr) {
  var first = arr[0].toLowerCase();
  var second = arr[1].toLowerCase();
  // 用let声明i,避免全局变量污染
  for(let i = 0; i < second.length; i++){
    // 只要有一个字符找不到,直接返回false
    if(first.indexOf(second[i]) === -1){
      return false;
    }
  }
  // 所有字符都找到了,才返回true
  return true;
}

修正的逻辑很简单:

  1. 遍历第二个字符串的每一个字符
  2. 只要发现某个字符在第一个字符串里不存在,立刻返回false
  3. 如果循环完整跑完,说明所有字符都能匹配,这时候才返回true

如果你喜欢更简洁的写法,还可以用数组的every方法,逻辑更直观:

function mutation(arr) {
  const firstStr = arr[0].toLowerCase();
  // 把第二个字符串拆成字符数组,检查每个字符是否都被第一个字符串包含
  return arr[1].toLowerCase().split('').every(char => firstStr.includes(char));
}

内容的提问来源于stack exchange,提问作者emred2700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:06:44