如何检查数组中的单词是否包含在字符串中,没有正则表达式?

时间:2017-11-03 04:53:51

标签: javascript string substring words

我正在试图找出为什么我的代码没有提供正确的输出。

我的input不应包含在array元素中。

我找到了一种用正则表达式解决它的简单方法,所以我没有使用正则表达式。

请分解我的代码,告诉我代码有什么问题。

function checkInput(input, words) {
  var arr = input.toLowerCase().split(" ");
  var i, j;
  var matches = 0;
  for (i = 0; i < arr.length; i++) {
    for (j = 0; j < words.length; j++) {
      if (arr[i] != words[j]) {
        matches++;
      }
    }
  }
  if (matches > 0) {
    return true;
  } else {
    return false;
  }
};

console.log(checkInput("Move an array element from one array", ["from"])); // should be false
console.log(checkInput("Move an array element from one array", ["elem"])); // should be true

2 个答案:

答案 0 :(得分:1)

if (arr[i] != words[j])大部分时间都会true {/ 1}}。

你想检查相反的情况并返回相反的逻辑,所以:

if(arr[i] == words[j]) {
  matches++;
}

if (matches > 0) {
    return false;
} else {
    return true;
}

但更简单的方法是:

function checkInput(input, words){
  let lowerCaseInput = input.toLowerCase().split(" ");
  return words.find(word => lowerCaseInput.includes(word)) === undefined;
}
如果找不到满足回调函数undefined提供的特定规则的元素,则

Array.prototype.find将返回word => lowerCaseInput.includes(word) undefined。因此,我们检查其返回值是否为input,它会告诉我们words中是否匹配了

请注意,您的函数会不必要地检查整个 words数组,即使它只与一个字匹配。< / p>

此外,.includes(word)中的字词区分大小写!如果您不想这样做,请将.includes(word.toLowerCase())替换为channel.invites.create(user_identity)

答案 1 :(得分:0)

由于您使用的是matches > 0,因此您认为只有在未找到匹配项时它才会返回true。但是当您输入ab aa cc和单词aa

时会发生什么
  • 第一次迭代matches = 1
  • 第二次迭代matches = 1
  • 第三次迭代matches = 2

所以匹配将包含wordinput项不同的次数。因此,只要true长度超过两个字,它就会始终返回input,因为input的至少一个词与word不同。如果找到matches,您可以考虑增加word的值。

&#13;
&#13;
function checkInput(input, words) {
    var arr = input.toLowerCase().split(" ");
    var i, j;
    var matches = 0;
    for (i = 0; i < arr.length; i++) {
        for (j = 0; j < words.length; j++) {
            if (arr[i] === words[j]) {
                matches++;
            }
        }
    }
    if (matches === 0) {
        return true;
    } else {
        return false;
    }
};

console.log(checkInput("Move an array element from one array", ["from"])); 
console.log(checkInput("Move an array element from one array", ["elem"]));
&#13;
&#13;
&#13;