繁体   English   中英

正确使用array.push方法

[英]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是您的浏览器试图打破无限循环。

这就是你所需要的。

此处的示例jsFiddle1jsFiddle2

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM