Javascript 使用具有for…in…的推入式数组。。。环
我试图在Javascript中使用以下代码,使用数组存储素数,以验证素数:Javascript 使用具有for…in…的推入式数组。。。环,javascript,arrays,Javascript,Arrays,我试图在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 f
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;
}
不起作用
似乎在每次nprimi.push(x)
之后,objetc nprimi中的元素数始终为零
也许这是一个非常愚蠢的错误,但我无法找到它!
非常感谢你的帮助 它不起作用,因为这不是中的
的目的for in
循环遍历可枚举对象属性的名称,而不是数组索引。这些名称是字符串,而不是数字。因此,在循环之后,k+1
将是一个串联操作,而不是加法操作。也就是说,如果k
是“2”
,那么k+1
将是“21”
不要使用for in
在数组中循环,除非您知道自己在做什么并使用了保护措施。更多关于循环数组的信息。再见,Giancarlo,
简单的回答是:在JavaScript中,您不使用for..in来循环数组
使用for..in循环对象
我们可以找到一个很好的解释
编辑:
还有一件事。在您的代码中,在函数verifica中,您有一个x参数和一个x局部变量,您应该真正删除var x
声明
function verifica(x)
{
var i;
var x; // <-- this shouldn't be here.
功能验证CA(x)
{
var i;
var x;//在for循环中循环之后,k的值将增加(k++)。但是在for的情况下,它不会发生。因此,在这种情况下,您必须手动执行。我已更新了函数:
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;
}
功能验证CA(x)
{
var i;
var x;
var-k;
对于(nprimi中的k)
//for(k=0;kfor in
在数组的索引上迭代
var myArray = ['a', 'b', 'c'];
for (k in myArray) {
console.log(k + ' -> ' + myArray[k]);
}
产出:
0 -> 'a'
1 -> 'b'
2 -> 'c'
如您所见,k
变量不包含'a',b',c'
“不工作”这不是一个有用的问题描述。您期望得到什么,以及会发生什么?为什么您试图在数组中使用for in
?它用于循环对象的可枚举属性名称,而不是数组的索引。有关循环数组的更多信息。请检查此项,它将帮助您提高内容质量
var myArray = ['a', 'b', 'c'];
for (k in myArray) {
console.log(k + ' -> ' + myArray[k]);
}
0 -> 'a'
1 -> 'b'
2 -> 'c'