正确使用数组.推的方法

proper use of the array.push method

本文关键字:方法 数组      更新时间:2023-09-26

如果我有一个简单的测试函数,将偶数添加到数组中:

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

也不是比较数组的长度,只是比较数组本身。添加.lengthenumbers。试着改成:

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

我不确定是否理解了你的问题。但是你不应该使用全局变量,也没有必要在while循环中递归地调用你的函数。

错误maximum call stack size exceeded是你的浏览器试图打破一个无限循环。

这就是你需要的。

这里的例子jsFiddle1和jsFiddle2

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

问题是(number <10)显然总是求值为true,导致无限循环。但是这个比较是错误的,因为你是在比较一个整数和一个数组,我想你是想得到数组的长度?:

while (enumbers.length < 10) {

另一回事。enumbers是一个局部变量,所以每次调用isEven都有它自己的数组。因此,函数被递归地反复调用。

我建议你在偶数方法之外创建数组

我应该这样写:

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