[英]proper use of the array.push method
如果我有一个简单的测试函数,该函数将偶数加到数组中:
function isEven(n){
var enumbers = [];
if (n % 2 == 0){
enumbers.push (n);
}
}
在数组中有固定数量的成员之前,如何增加参数? 例如,我已经尝试过:
function isEven(n){
var enumbers = [];
while ( enumbers.length < 10){
if (n % 2 == 0){
enumbers.push (n);
}
console.log (enumbers);
n = n + 1;
isEven(n);
}
}
isEven(1);
但似乎只是为每个数字创建一个新数组,直到最终引发范围错误(超出最大调用堆栈大小)为止。
它多次创建该数组,因为您经常使用以下命令调用该函数:
isEven(n);
您还没有将数组的长度与数组的长度进行比较。 将.length
添加到enumbers
。 尝试更改为:
var enumbers = [];
while ( enumbers.length < 10){
if (n % 2 == 0){
enumbers.push (n);
}
console.log (enumbers);
}
问题在于(enumber <10)显然总是评估为true,从而导致无限循环。 但是这种比较是错误的,因为您正在将整数与数组进行比较,我想您正在尝试获取数组长度?:
while (enumbers.length < 10) {
另一件事。 enumbers是一个局部变量,因此对isEven的每次调用都有其自己的数组。 因此,一次又一次地递归调用这些函数。
我建议您在is方法之外创建数组
我不确定是否理解您的问题。 但是,您不应该使用全局变量,并且没有必要在while循环内递归调用函数。
错误maximum call stack size exceeded
是您的浏览器试图打破无限循环。
这就是你所需要的。
function isEven(n) {
var enumbers = [];
while (enumbers.length < 10) {
if (n % 2 == 0) {
enumbers.push(n);
}
n++;
}
return enumbers;
}
设置测试
var n = 1;
var evenArray = isEven(n); //call isEven function and it returns an array
document.body.innerHTML = evenArray; //2,4,6,8,10,12,14,16,18,20
我会写一些像:
function isEven(n,enumbers){
while(enumbers < 10){
if (n % 2 == 0){
enumbers.push (n);
}
console.log (enumbers);
n = n + 1;
isEven(n, enumbers);
}
}
var enumbers = [];
isEven(1,enumbers);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.