我正在尝试在 Javascript 中使用此代码来验证素数,使用数组来存储它们:
var nprimi = [2];
function verifica(x)
{
var i;
var x;
var k;
//for (k in nprimi)
for (k=0;k<nprimi.length;k++)
{
if (nprimi[k]==x)
return true;
else if (x%nprimi[k]==0)
return false;
}
for (i=k+1;i<x;i++)
{
if (x%i==0)
return false;
}
nprimi.push(x);
return true;
}
我的问题是:
如果我使用
for (k=0;k<nprimi.length;k++)
for循环正常运行,但使用
for (k in nprimi)
不起作用。
似乎在每个nprimi.push(x)
之后,objetc nprimi中的元素数量始终为零。
也许这是一个非常愚蠢的错误,但我无法找到它! 非常感谢您的帮助!
答案 0 :(得分:0)
它不起作用,因为那不是module A
module B
XYZ = "5"
def self.testx
puts "Test"
end
end
end
的用途。 for-in
遍历可枚举对象属性的名称,而不是数组索引。这些名字是字符串,而不是数字。因此,在循环之后,for-in
将是连接操作,而不是添加操作。也就是说,如果k+1
为k
,则"2"
将为k+1
。
除非您知道自己在做什么并使用安全措施,否则不要使用"21"
来遍历数组。有关循环数组的更多信息in this answer。
答案 1 :(得分:0)
Ciao Giancarlo, 简短的回答是:在JavaScript中,你不使用for..in循环遍历数组。
您使用for..in循环遍历对象。
找到一个非常好的解释here。
编辑:
另一件事。在你的代码中,在函数verifica中,你有一个x参数和一个x局部变量,你应该真的删除var x
声明。
function verifica(x)
{
var i;
var x; // <-- this shouldn't be here.
答案 2 :(得分:0)
在循环之后的for循环中,k的值将递增(k ++)。但是在for-in的情况下它不会发生。所以在这种情况下你必须手动完成。我更新了这个功能:
function verifica(x)
{
var i;
var x;
var k;
for (k in nprimi)
//for (k=0;k<nprimi.length;k++)
{
if (nprimi[k]==x)
return true;
else if (x%nprimi[k]==0)
return false;
}
k++; //This is the line making difference in for-in loop
for (i=k+1;i<x;i++) {
if (x%i==0)
return false;
}
nprimi.push(x);
return true;
}
答案 3 :(得分:0)
for in
遍历数组的indexes
var myArray = ['a', 'b', 'c'];
for (k in myArray) {
console.log(k + ' -> ' + myArray[k]);
}
输出:
0 -> 'a'
1 -> 'b'
2 -> 'c'
如您所见,k
变量不包含'a', 'b', 'c'