Javascript递归循环项到数组
我正在尝试制作一个小程序,提示用户向购物清单中添加物品 我读过关于使用递归循环的书。我知道while循环可能更适合此任务,但我遇到了与while循环相同的问题,我想尝试递归。听起来好像我知道我在做什么。。。“是的,我使用递归枚举数组,同时提示用户进行验证…呼呼呼呼”。。。但是,我离题了 代码如下:Javascript递归循环项到数组,javascript,arrays,recursion,prompt,Javascript,Arrays,Recursion,Prompt,我正在尝试制作一个小程序,提示用户向购物清单中添加物品 我读过关于使用递归循环的书。我知道while循环可能更适合此任务,但我遇到了与while循环相同的问题,我想尝试递归。听起来好像我知道我在做什么。。。“是的,我使用递归枚举数组,同时提示用户进行验证…呼呼呼呼”。。。但是,我离题了 代码如下: function addToArray() { var array = []; array.push(prompt("Add items to array or
function addToArray() {
var array = [];
array.push(prompt("Add items to array or 'q' to stop"));
if (array.pop() == 'q') {
document.write(array)
}
else {
addToArray();
}
}
addToArray();
如果您注意到的话,它会像预期的那样循环,但不会向数组中添加项。我也尝试过array[I]=I
技术,但没有效果,数组仍然是空的。还有,为什么使用一个没有参数的函数,我不会遇到太多的递归?是因为条件语句吗
如果你知道我做错了什么,试着暗示正确的答案,而不是脱口而出。我想有一个“啊哈”的时刻。我认为这些都有助于我们更好地学习
谢谢各位。(和gals)您的函数在每个循环/递归上重新创建var array=[]。我不确定递归是否是适合您的工作的工具—它似乎不是—但如果您从JavaScript/开发开始,只是尝试一下,那么就可以了。您正在创建一个新数组,而不是将它传递给递归调用 改为这样做 演示: 现在,您从一个空数组开始,对于每个递归调用,它向前传递相同的数组 另外,我对其进行了更改,使其在
if()
条件下不使用.pop()
,否则在编写时总是会得到一个空数组。(.pop()
方法实际上删除了最后一项。)
最后,确保您没有使用文档。在加载DOM后编写。如果是这样,您需要将其更改为使用DOM操纵方法
您可以采用不同的方法,这样就根本不需要.pop()
演示:
while
循环不起作用的原因很可能是因为原始的.pop()
问题。虽然“无限循环”可能是您真正想要的(因为它可能会使代码更简单),但您可以通过默认数组并将其作为参数传递给函数来实现递归。就像这样
function addToArray( array ) {
var array = array || [];
array.push(prompt( "Add items to array or 'q' to stop" ));
if ( array[array.length - 1] === 'q' ) {
document.write(array.slice( 0, -1 ))
} else {
addToArray( array );
}
}
addToArray();
您介绍的代码有两个问题。第一,正如前面指出的,每次调用函数时都要重新定义数组变量。其次,array.pop()会更改数组,因此当您访问document.write调用时,无论如何都会打印一个空数组。hint#1:var-array=[]
在每个函数上创建一个新数组callhint#2:您不需要递归,只需要无限循环。是pop()引起了这个问题。我意识到它显示了数组中的最后一项,但忘记了它也会删除它。你能解释一下array[array.length-1]='q'
实际上在做什么吗?array.length-1代表什么?Nvm找到了答案。它正在引用数组的最后一项。0表示数组项1,-1表示最后一项。谢谢你,伙计。
function addToArray(array) {
var item = prompt("Add items to array or 'q' to stop");
if (item == 'q') {
document.body.textContent = array;
} else {
array.push(item);
addToArray(array);
}
}
addToArray([]);
function addToArray( array ) {
var array = array || [];
array.push(prompt( "Add items to array or 'q' to stop" ));
if ( array[array.length - 1] === 'q' ) {
document.write(array.slice( 0, -1 ))
} else {
addToArray( array );
}
}
addToArray();