编写hasNoneLetters函数遇测试不通过,请求排查解决
排查hasNoneLetters函数的逻辑错误
你的代码存在三个核心问题,导致测试用例不通过:
- 逻辑完全反转:
phrase.includes(blacklist)返回true时,说明phrase包含整个blacklist字符串,这时候应该返回false(需求是含黑名单字符就返回false),但你返回了true;反之不包含时返回false,和需求完全相反。 - 检查对象错误:需求要求检查blacklist中的任意单个字符是否存在于phrase中,而你的代码是检查整个blacklist字符串是否是phrase的子串,完全不符合需求逻辑。
- 未处理大小写不敏感:需求明确比较不区分大小写,但你的代码没有对两个字符串做统一大小写的转换,导致无法匹配大小写不同的字符。
修正后的代码(两种实现方式)
方式一:遍历黑名单字符
function hasNoneLetters(phrase, blacklist) { // 统一转小写,消除大小写差异 const lowerPhrase = phrase.toLowerCase(); const lowerBlacklist = blacklist.toLowerCase(); // 遍历黑名单每个字符,检查是否存在于phrase中 for (const char of lowerBlacklist) { if (lowerPhrase.includes(char)) { // 只要有一个字符存在,直接返回false return false; } } // 所有字符都不存在,返回true return true; }
方式二:使用数组every方法(更简洁)
function hasNoneLetters(phrase, blacklist) { const lowerPhrase = phrase.toLowerCase(); // 将黑名单转小写后拆分为字符数组,检查每个字符都不在phrase中 return [...blacklist.toLowerCase()].every(char => !lowerPhrase.includes(char)); }
验证示例
hasNoneLetters('Mate Academy', 'pqrs'):转小写后phrase为'mate academy',黑名单字符p/q/r/s均不在其中,返回true,符合需求。hasNoneLetters('ABC', 'a'):转小写后phrase为'abc',包含黑名单字符a,返回false,符合需求。
内容的提问来源于stack exchange,提问作者Nicu Iorga
相关产品推荐
相关产品推荐

