如果我有一个简单的测试函数,可以为数组添加偶数:
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);
但它似乎只为每个数字创建一个新数组,直到它最终抛出一个范围错误(超出最大调用堆栈大小)。
答案 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
是您的浏览器试图打破无限循环。
这就是你需要的。
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);