Jer*_*ker 2 javascript arrays recursion prompt
我正在尝试制作一个小程序,提示用户将项目添加到购物清单。
我读过有关使用递归循环的信息。我知道while循环可能更适合此任务,但是我在while循环中遇到了同样的问题,我想尝试递归。听起来好像我知道自己在做什么……“是的,我在提示用户验证时使用了递归枚举数组……hur hur hur”……但是,我离题了。
这是代码:
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();
Run Code Online (Sandbox Code Playgroud)
如果您会注意到,它会像预期的那样循环,但不会在数组中添加项目。我也尝试过该array[i] = i技术,但无济于事,该数组仍然为空。另外,为什么使用不带args的函数时我没有遇到太多的递归?是因为条件语句吗?
如果您知道我在做什么错,请尝试提示正确的答案,而不是仅仅弄清楚它。我想拥有那个“啊哈”的时刻。我认为所有这些都有助于我们更好地学习。
多谢你们。(和女孩)
您正在创建一个新数组,而不是将其传递给递归调用。
改为这样做。
演示: http : //jsfiddle.net/kDtZn/
function addToArray(array) {
array.push(prompt("Add items to array or 'q' to stop"));
if (array[array.length-1] == 'q') {
array.pop();
document.write(array)
}
else {
addToArray(array);
}
}
addToArray([]);
Run Code Online (Sandbox Code Playgroud)
现在,您从一个空数组开始,对于每个递归调用,它将向前传递相同的数组。
另外,我对其进行了更改,以使其.pop()在该if()条件下不使用,否则,在编写该数组时,您总是会得到一个空数组。(该.pop()方法实际上删除了最后一项。)
最后,确保在document.write加载DOM之后不使用。如果是这样,则需要将其更改为使用DOM操作方法。
您可以采用其他方法,这样就根本不需要.pop()。
演示: http : //jsfiddle.net/kDtZn/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([]);
Run Code Online (Sandbox Code Playgroud)
您的while循环无法运行的原因很可能是由于原始.pop()问题。