Javascript递归循环项到数组

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的函数时我没有遇到太多的递归?是因为条件语句吗?

如果您知道我在做什么错,请尝试提示正确的答案,而不是仅仅弄清楚它。我想拥有那个“啊哈”的时刻。我认为所有这些都有助于我们更好地学习。

多谢你们。(和女孩)

use*_*012 5

您正在创建一个新数组,而不是将其传递给递归调用。

改为这样做。

演示: 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()问题。