正确使用数组.推的方法
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);
}
我不确定是否理解了你的问题。但是你不应该使用全局变量,也没有必要在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);
相关文章:
- 数组在递归方法中设置为null
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 用于检查数组中是否存在元素的javascript自定义方法
- call()和apply()实际上是用来欺骗方法处理类似数组的对象的
- 从数组中删除元素的最佳方法是:javascript/jquery
- knex:根据结果创建数组的合适方法是什么
- 将数组从javascript格式化为php的更好方法,反之亦然
- 如何创建一个方法来验证数组的范围
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 解析带有嵌入式数组的JSON对象,方法
- 查找对象数组是否包含其中一个标记的最快方法
- 如何用Typescript用自定义方法实现类数组
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- JavaScript 中的范围(为什么在 $.post() 方法数组的作用域是本地的?)
- Javascript方法不填充方法(数组)
- Objects筛选方法数组中的THIS关键字