Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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主检查器不工作_Javascript_Arrays_For Loop_While Loop - Fatal编程技术网

JavaScript主检查器不工作

JavaScript主检查器不工作,javascript,arrays,for-loop,while-loop,Javascript,Arrays,For Loop,While Loop,我的主检查器不工作。我认为有更简单的方法来完成这项挑战,但我需要的功能是: 对于给定的数字p: 1) 用2到p的数字填充数组numaray 我通过以下方式实现了这一目标: for (var i=2; i<(p + 1); i++) { numArray.push(i); }; 似乎错过了数字 函数checkIfPrime(p){ 努马拉伊=[]; primeArray=[]; 对于(var i=2;i

我的主检查器不工作。我认为有更简单的方法来完成这项挑战,但我需要的功能是:

对于给定的数字p:

1) 用2到p的数字填充数组numaray

我通过以下方式实现了这一目标:

for (var i=2; i<(p + 1); i++) {
    numArray.push(i);
  };
似乎错过了数字

函数checkIfPrime(p){
努马拉伊=[];
primeArray=[];
对于(var i=2;i<(p+1);i++){
努马拉推(i);
};
对于(var j=0;jconsole.log(checkIfPrime(p))正如Mike所说,在修改数组时使用for循环迭代数组通常不是一个好主意

我认为有两种方法可以做到这一点:

或者手动管理迭代变量,并确保它仅在需要时递增

或者使用数组的筛选方法。下面是一个基本示例,可以帮助您开始:

[1,2,3].filter(function(x){return x != 2})
// Will return [1,2]

请记住,这将返回一个带有筛选值的新数组,因此您必须通过执行类似于
numArray=numArray.filter(…)
的操作来重新评估它,因为您对建议比对工作代码更感兴趣,所以让我们从备选方案开始

问题是,当您从数组中拼接一个项时,它会更改其长度。它没有什么新内容,但问题是,您正在迭代同一个数组

因此,对于给定数组
[2,3,4,5]
,如果
j
为0,
prime
2
。所以您删除了
2
4
。所以新的长度是2。问题是剩余的元素将被转移。所以它看起来像
[3,5]

现在在迭代中,
j
将是
1
。因此,它将从
5
开始,并将跳过5

备选方案:

不要删除元素,而是将它们指定给默认值,默认情况下将跳过该值。这样,您的索引将保持正确,并且您的逻辑将变得简单

函数checkIfPrime(p){
var numArray=[];
var primerarray=[];
对于(var i=2;i<(p+1);i++){
努马拉推(i);
};
对于(var j=0;jconsole.log(checkIfPrime(p))我为younever创建了一个从零开始一直运行到最后的数组,如果您还打算以某种方式更改数组中元素的索引的话。要么从头到尾运行,这样任何
splice
操作都不会影响对尚未达到的内容的索引,要么确保每次编写
numaray.
和函数名时,都能根据需要更新迭代变量。
[1,2,3].filter(function(x){return x != 2})
// Will return [1,2]