我正在试图找出为什么我的代码没有提供正确的输出。
我的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
答案 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 所以匹配将包含word
与input
项不同的次数。因此,只要true
长度超过两个字,它就会始终返回input
,因为input
的至少一个词与word
不同。如果找到matches
,您可以考虑增加word
的值。
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;