使用push in array with for ... in ... loop

时间:2016-05-02 12:44:13

标签: 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 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中的元素数量始终为零。

也许这是一个非常愚蠢的错误,但我无法找到它! 非常感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

它不起作用,因为那不是module A module B XYZ = "5" def self.testx puts "Test" end end end 的用途。 for-in遍历可枚举对象属性的名称,而不是数组索引。这些名字是字符串,而不是数字。因此,在循环之后,for-in将是连接操作,而不是添加操作。也就是说,如果k+1k,则"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'