正确使用array.push方法

时间:2013-06-20 19:54:38

标签: javascript

如果我有一个简单的测试函数,可以为数组添加偶数:

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);

但它似乎只为每个数字创建一个新数组,直到它最终抛出一个范围错误(超出最大调用堆栈大小)。

5 个答案:

答案 0 :(得分:2)

它正在多次创建该数组,因为您经常使用以下函数调用该函数:

isEven(n);

你也没有比较数组的长度,只是数组。将.length添加到enumbers。尝试更改为:

var enumbers = [];
while ( enumbers.length < 10){
    if (n % 2 == 0){
        enumbers.push (n);
    }
    console.log (enumbers);
}

答案 1 :(得分:0)

问题是(enumber&lt; 10)显然总是评估为true,导致无限循环。但是这种比较是错误的,因为你比较一个整数和一个数组,我认为你试图获得数组长度?:

while (enumbers.length < 10) {

另一件事。 enumbers是一个局部变量,因此每次调用isEven都有自己的数组。因此,函数被一遍又一遍地递归调用。

答案 2 :(得分:0)

我建议您创建除偶数方法之外的数组

答案 3 :(得分:0)

我不确定我是否理解你的问题。 但是你不应该使用全局变量,也不必在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

答案 4 :(得分:-1)

我会写一些类似的东西:

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);