我想在这里打破for循环并返回false,因此它不会继续使用其余的数组元素测试条件并返回我不希望它返回的值。 它是一个代码,它应该通过小于100的素数来测试数字的可分性。
var primenumbers = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97];
var primetest = function (a) {
for (i = 0; i < primenumbers.length; i += 1) {
if ((a !== primenumbers[i]) && (a % primenumbers[i] === 0)) {
return false;
} else {
return true;
}
}
}
答案 0 :(得分:3)
你的问题是两个return
语句都在循环中,所以循环总是只执行第一次迭代然后返回。它永远不会测试除数组中第一个元素以外的任何东西。
解决方案:将其中一个语句移出循环,以便检查所有数组元素,如果没有匹配,则执行另一个return语句:
var primenumbers = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97];
var primetest = function (a) {
for (i = 0; i < primenumbers.length; i += 1) {
if ((a !== primenumbers[i]) && (a % primenumbers[i] === 0)) {
return false;
}
}
return true;
}
答案 1 :(得分:0)
您的代码存在的问题并不是它在您想要的时候不会退出,即使您不想要它也会退出。
不要在else
的情况下返回任何内容,而是等到循环结束后才返回在循环中找不到匹配项的结果:
var primenumbers = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97];
function primetest(a) {
for (i = 0; i < primenumbers.length; i += 1) {
if ((a !== primenumbers[i]) && (a % primenumbers[i] === 0)) {
return false;
}
return true;
}
}