Javascript 如果黑名单中没有字母,则返回true

Javascript 如果黑名单中没有字母,则返回true,javascript,Javascript,如果黑名单中没有字母,则返回true 都出现在短语中。如果至少有一封来自 黑名单出现在短语return false中 比较应该不区分大小写。意思是“A”==“A” /** * * @param {string} blacklist * @param {string} phrase * * @returns {boolean} */ function hasNoneLetters(blacklist, phrase) {

如果黑名单中没有字母,则返回true 都出现在短语中。如果至少有一封来自 黑名单出现在短语return false中

比较应该不区分大小写。意思是“A”==“A”

/**
     * 
     * @param {string} blacklist
     * @param {string} phrase
     * 
     * @returns {boolean}
     */
    function hasNoneLetters(blacklist, phrase) {
      console.log(blacklist)
      var x = phrase.includes(blacklist);
      if(x === false){
        return true
      }
      else{
        return false
      }

    }

你需要检查黑名单中的每一封信,而不是一次检查全部黑名单

function hasNoneLetters(blacklist, phrase) {
  let lowerCasePhrase = phrase.toLowerCase();
  for (let letter of blacklist.toLowerCase()) {
    if (lowerCasePhrase.includes(letter)) return false
  }
  return true
}

此外,您可能希望使用
集合
,在其中插入短语的所有字母以优化性能。这将使您的运行时间从O(N*M)下降到O(max(N,M)),其中N和M是输入的长度。

您需要立即检查黑名单中的每个字母,而不是整个黑名单

function hasNoneLetters(blacklist, phrase) {
  let lowerCasePhrase = phrase.toLowerCase();
  for (let letter of blacklist.toLowerCase()) {
    if (lowerCasePhrase.includes(letter)) return false
  }
  return true
}

此外,您可能希望使用
集合
,在其中插入短语的所有字母以优化性能。这将使您的运行时间从O(N*M)下降到O(max(N,M)),其中N和M是输入的长度。

您不是在问问题-您在为什么挣扎


如果您想知道为什么您的函数不工作,
var x=phrase.includes(黑名单)
,仅当
整个黑名单出现时,才会返回
true
按顺序出现在
短语
中,您不是在问问题-您在挣扎什么


如果您想知道为什么您的函数不工作,
var x=phrase.includes(黑名单)
,仅当
整个黑名单
短语
中按顺序出现时才会返回
true
,因为您正在检查一个字符串是否完整包含在另一个字符串中,所以它不起作用。相反,您需要分别获取
黑名单
的每个字符,并检查它是否存在于
短语
字符串中

此外,对字符串使用
toLowerCase
,以进行不区分大小写的比较

函数包含多个字母(黑名单、短语){
blacklist=blacklist.toLowerCase();
短语=短语.toLowerCase();
for(黑名单的常量字符)
如果(短语包括(字符))
返回false;
返回真值
}
log(hasNoneLetters('abc','This has'))
log(hasNoneLetters('XYZ','This doesnt'))

log(hasNoneLetters('C','不区分大小写'))
它不起作用,因为您正在检查一个字符串是否完整地包含在另一个字符串中。相反,您需要分别获取
黑名单
的每个字符,并检查它是否存在于
短语
字符串中

此外,对字符串使用
toLowerCase
,以进行不区分大小写的比较

函数包含多个字母(黑名单、短语){
blacklist=blacklist.toLowerCase();
短语=短语.toLowerCase();
for(黑名单的常量字符)
如果(短语包括(字符))
返回false;
返回真值
}
log(hasNoneLetters('abc','This has'))
log(hasNoneLetters('XYZ','This doesnt'))

log(hasNoneLetters('C','不区分大小写'))
最短的答案

function hasNoneLetters(blacklist, phrase) {
    return !blacklist.split('').find(b => phrase.includes(b))
 }
函数包含多个字母(黑名单、短语){
return!blacklist.split(“”).find(b=>phrase.includes(b))
}
log(hasNoneLetters('Abc','the短语'))
log(hasNoneLetters('Abc','the短语'))

log(hasNoneLetters('abc','the短语'))
最短的答案

function hasNoneLetters(blacklist, phrase) {
    return !blacklist.split('').find(b => phrase.includes(b))
 }
函数包含多个字母(黑名单、短语){
return!blacklist.split(“”).find(b=>phrase.includes(b))
}
log(hasNoneLetters('Abc','the短语'))
log(hasNoneLetters('Abc','the短语'))

log(hasNoneLetters('abc','thephrase'))
如果没有匹配的字母,它应该返回true)修复了它。只是需要交换返回值。如果没有匹配的字母,它应该返回true)修复了它。两个都是字符串:
@param{string}blacklist@param{string}phrase
两个都是字符串:
@param{string}blacklist@param{string}phrase
如果黑名单是作为字符串提供的,我认为需要将其拆分为一个数组。将所有内容都设置为小写或大写以比较值。希望这会有所帮助。我认为如果黑名单是以字符串形式提供的,则需要将其拆分为一个数组。将所有内容都设置为小写或大写以比较值。希望这能有所帮助。非常感谢你,对不起,我是Noob,这对我来说很难理解ES6,因为这是到目前为止唯一包含案例不敏感的答案。但是,有一些重要的信息与此相关。@JessicaBulldog我添加了与您的代码相似的版本谢谢您非常匹配,对不起,我不是Oob,这对我来说很难理解ES6,因为这是目前为止唯一包含案例不敏感的答案。不过,有一些重要信息与此相关。@JessicaBulldog我添加了与您的代码类似的版本