Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用具有for…in…的推入式数组。。。环_Javascript_Arrays - Fatal编程技术网

Javascript 使用具有for…in…的推入式数组。。。环

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

我试图在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;
 }
不起作用

似乎在每次
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;k
for 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'