Проверьте, содержит ли строка какой-либо массив строк без regExp [duplicate]

1

Я проверяю строковый ввод, содержит ли он какой-либо массив строк или нет. Это проходит большинство тестов, но не ниже.

Может ли кто-нибудь сломать мой код, почему он работает неправильно?

     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;

Спасибо за ваше время!

  • 1
    это не проблема дела
  • 0
    Почему вы не используете регулярные выражения?
Показать ещё 1 комментарий
Теги:
string
arrays

2 ответа

3

Для этого вы можете использовать функциональные методы. Попробуйте 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)));
  • 1
    Это с учетом регистра. ОП хочет решение без учета регистра.
  • 0
    Нечувствительность к регистру не имеет отношения к вопросу. Это очень, очень ясно, что вы должны уменьшить строки. Не поощряя вампиров.
Показать ещё 2 комментария
-1

Вы можете использовать array#includes чтобы проверить, существует ли слово на вашем входе, и конвертировать как ваш input и words в нижнем регистре, а затем использовать 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"]));

Вы можете создать регулярное выражение и использовать флаг i для указания нечувствительности к регистру

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"]));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню