[英]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.