我有一个小脚本,它将检查数组中的一个元素(arr[0]
)是否等于数组的第二个元素(arr[1]
)。但是,当它检查以下数组时,我希望它返回false
,但它返回true
。所以我的问题是,为什么这会返回true
,如何修复它以像预期的那样返回false
?
function mutation(arr) {
var elem0 = arr[0].toLowerCase();
var elem1 = arr[1].toLowerCase();
for(var x=0; x < elem1.length; x++){
check = elem0.indexOf(elem1[x]);
if(check === -1){
return false;
}
return true;
}
}
mutation(["hello", "hey"]); //returns true
答案 0 :(得分:1)
您快速放置return true
您需要将其放在for
语句之后
function mutation(arr) {
var elem0 = arr[0].toLowerCase();
var elem1 = arr[1].toLowerCase();
for(var x=0; x < elem1.length; x++){
check = elem0.indexOf(elem1[x]);
if(check === -1){
return false;
}
}
return true;
}
mutation(["hello", "hey"]); //returns false
答案 1 :(得分:1)
您正在循环遍历字符串中的字符(请参阅elem1
实际上是什么),因此您获得true
因为hey
的第一个字符,即{{1}确实在字符串h
中找到了。
如果要等待它完成对整个字符串的迭代,请使用布尔标志,然后在迭代结束时返回该标志的值。
但是,您似乎只想比较两个元素:
hello
答案 2 :(得分:1)
我有这个小脚本,它将检查数组中是否有一个元素 (arr [0])等于数组的第二个元素(arr [1])
它返回true,因为e
在元素 hello 和嘿
您的代码基本上是遍历字符串中的所有字符。
您只需检查
即可function mutation(arr) {
return arr[0].toLowerCase() == arr[1].toLowerCase();
}
答案 3 :(得分:1)
这个问题的表达有一些逻辑上的缺陷或者至少有一些缺点。例如给定条件意味着数组中的所有项必须相等。如果是这种情况,那么只需要一小段指令就足够了
myArray.every(e => e == myArray[0])
var a = [1,1,1,1,1,1,1,1],
b = ["hello", "hey"];
document.write("<pre> a array :" + a.every(e => e == a[0]) + "</pre>");
document.write("<pre> b array :" + b.every(e => e == b[0]) + "</pre>");