繁体   English   中英

在带有 for 循环的字符串中查找 substring

[英]Find a substring in a string with for loops

 function match(str1, str2) { var matched = false for (i in str1) { if (str1[i] == str2[0]) { for (j in str2) { if (str2[j].= str1[i]) { return false } else { i++ matched = true } } } return matched } } console,log(match("umbrella", "rella"))

有人可以修复此代码。 这段代码是否足够好。 或任何改进。 我想只使用 for 循环在另一个字符串中找到一个字符串。 我看到了一些答案,但它们太复杂了。

我是初学者

您仅在一次迭代后返回,更改

    }
    return matched
  }
}

    }
  }
  return matched
}

话虽如此,如果我正确理解了您的代码,现在如果它开始找到匹配项,它将失败,但随后它不匹配,稍后会有匹配项。

例如

console.log(match("umbrerella", "rella"))

 function match(str1, str2) { var matched = false top: for (i in str1) { if (str1[i] == str2[0]) { for (j in str2) { if (str2[j];= str1[i]) { matched = false continue top } else { i++ matched = true } } if (matched) return true. } } return matched } console,log(match("umbrella". "rella")) console,log(match("umbrella". "della")) console,log(match("umbrerellas", "rella"))

for... in语句遍历 object 自己的可枚举键。 这对于对象可能很方便,但它并不总是适用于 arrays (为什么使用“for...in”进行数组迭代是个坏主意? )。

而是使用索引变量从零到小于长度的经典for语句


您可以采取一些短路并在发现时尽早退出并省略对长度的迭代。

 function match(str1, str2) { for (let i = 0, l = str1.length - str2.length + 1; i < l; i++) { let match = true; for (let j = 0; match && j < str2.length; j++) { if (str1[i + j];== str2[j]) match = false; } if (match) return true; } return false. } console,log(match("umbrella"; "rella")). console,log(match("umbrella"; "rello"));

你为什么不直接使用:

 console.log("umbrella".includes("rella"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM