函数循环未迭代问题:代码返回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
相关产品推荐
相关产品推荐

