Я проверяю строковый ввод, содержит ли он какой-либо массив строк или нет. Это проходит большинство тестов, но не ниже.
Может ли кто-нибудь сломать мой код, почему он работает неправильно?
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;
Спасибо за ваше время!
Для этого вы можете использовать функциональные методы. Попробуйте 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)));
Вы можете использовать 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"]));