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

函数循环未迭代问题:代码返回false但预期应为true

问题:判断数组字符串是否包含指定字符的函数返回错误结果

以下代码执行后返回false,但预期应该返回true:

function containss(arr, charr)
{
 for (let w = 0; w < arr.length; w++)
 {
   //console.log(arr[0][q]);
   console.log(arr[0][w]);
   if (arr[0][w].toLowerCase() === charr[0].toLowerCase())
   {
     return true;
   }
 }
 return false;
}

  
let arr2 = ["Hello"];
console.log(containss(arr2, "e"))

尝试调整索引后,只有传入字母H或h时函数才会返回true,需要解决这个问题。


解决方案

问题出在循环逻辑上:你当前的循环是遍历数组的长度,而不是遍历数组中字符串的每个字符。以arr2 = ["Hello"]为例,数组长度是1,所以循环只执行1次(w=0),只会检查字符串"Hello"的第0位字符'H',自然只有传入H/h才会匹配成功。

修正思路:

  • 先遍历数组中的每个字符串元素
  • 对每个字符串,再遍历它的每一个字符进行匹配

修正后的代码:

function containss(arr, charr) {
  // 遍历数组中的每个字符串
  for (let w = 0; w < arr.length; w++) {
    const str = arr[w];
    // 遍历当前字符串的每个字符
    for (let i = 0; i < str.length; i++) {
      if (str[i].toLowerCase() === charr[0].toLowerCase()) {
        return true;
      }
    }
  }
  return false;
}

let arr2 = ["Hello"];
console.log(containss(arr2, "e")); // 现在会返回true

或者用更简洁的数组方法实现,逻辑更清晰:

function containss(arr, charr) {
  const target = charr[0].toLowerCase();
  return arr.some(str => 
    str.toLowerCase().includes(target)
  );
}

let arr2 = ["Hello"];
console.log(containss(arr2, "e")); // 返回true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:40:18