我这里有一些代码正在使用javascript onclick事件,该事件调用' inArray '函数并传递用户输入值。我试图遍历数组并将输入的'值'与数组中的一个值匹配。我不是要尝试返回'true / false'但是如果条件 array [i]等于传递给它的值 ,那么我想执行'getElement'并放置相应的文字。
function inArray(aValue) {
var value = parseInt(aValue);
var array = [1,2,3,4,5,6,7];
for (i = 0; i < array.length; i++){
if (array[i] === value) {
document.getElementById('primeOutput').innerHTML =
"yes, that's a prime below 200";
}
}
document.getElementById('primeOutput').innerHTML =
"not a prime number below 200";
}
我在屏幕上打印了返回类型,值和数组都是面编号,打印时,它们的编号相同,为什么会这样继续打印最后一个输出? (不是200以下的素数)注意:当我将if语句中的条件翻转为'!=='时,它会将第一个语句打印到html元素id'ed为'primeOutput' 。
另外,正如您可能已经注意到的,我只是想将用户输入与200以下的素数列表进行比较。虽然有很多方法可以做到这一点,但我真的试图找出为什么这个代码会当我知道值在数组中并且两个数据类型都是数字时,不打印第一个语句?
再次感谢任何详细解释。
答案 0 :(得分:3)
Medet的回答是正确的,但没有告诉你为什么你的代码不起作用。一旦找到匹配的元素,就会继续循环,无论如何都会调用函数的最后一行。没有办法阻止它抛出错误或提前返回。
您可以使用found
变量来解决此问题:
function inArray(aValue) {
var value = parseInt(aValue),
array = [1, 2, 3, 4, 5, 6, 7],
found = false;
for (i = 0; i < array.length; i++) {
if (array[i] === value) {
found = true;
break;
}
}
if (found) {
document.getElementById("primeOutput").innerHTML =
"yes, that's a prime below 200";
} else {
document.getElementById("primeOutput").innerHTML =
"not a prime number below 200";
}
}
然而,有一种更简单的方法:
function inArray(aValue) {
var value = parseInt(value),
array = [1, 2, 3, 4, 5, 6, 7];
return array.indexOf(value) !== -1
}
然后,您可以使用此true
/ false
值将输出呈现在其他位置:
function renderPrimeCheck(aValue) {
if (inArray(aValue)) {
document.getElementById("primeOutput").innerHTML =
"yes, that's a prime below 200";
} else {
document.getElementById("primeOutput").innerHTML =
"not a prime number below 200";
}
}
答案 1 :(得分:0)
// credit: https://stackoverflow.com/a/40200710/2308005
function isPrime(num) {
for(var i = 2; i < num; i++)
if(num % i === 0) return false;
return num !== 1;
}
function inArray(aValue) {
var value = parseInt(aValue);
if (value < 200) {
if (isPrime(value)) {
document.getElementById('primeOutput').innerHTML = "yes, that's a prime below 200";
} else {
document.getElementById('primeOutput').innerHTML = "not a prime number below 200";
}
}