javascript - Kontrollera om en sträng innehåller någon av en array med strängar utan regExp


Jag kontrollerar en stränginmatning för att se om den innehåller någon av en array av strängar eller inte. Den klarar de flesta tester men inte det nedanstående.

Kan någon förklara för mig varför min kod inte fungerar som den ska?

     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;
      }
    };

checkInput("Visiting new places is fun.", ["aces"]); // returns false // code is passing from this test
checkInput('"Definitely," he said in a matter-of-fact tone.', 
    ["matter", "definitely"])); // returns false; should be returning true;

Tack för din tid!

Svar #1

Du kan använda funktionella metoder för detta. Prova Array.some.

const words = ['matters', 'definitely'];
const input = '"Definitely," he said in a matter-of-fact tone.';
console.log(words.some(word => input.includes(word)));

Svar #2

Du kan använda array#includes för att kontrollera om ett ord finns i din inmatning och konvertera både din input och words till gemener och sedan använda array#includes.

function checkInput(input, words) {
 return words.some(word => input.toLowerCase().includes(word.toLowerCase()));
}

console.log(checkInput('"Definitely," he said in a matter-of-fact tone.', 
["matter", "definitely"]));

Du kan skapa reguljära uttryck och använda i-flaggan för att ange skiftlägesokänslighet

function checkInput(input, words) {
 return words.some(word => new RegExp(word, "i").test(input));
}

console.log(checkInput('"Definitely," he said in a matter-of-fact tone.', 
["matter", "definitely"]));