簡體   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