繁体   English   中英

Javascript递归循环项到数组

[英]Javascript recursion loop items to array

我正在尝试制作一个小程序,提示用户将项目添加到购物清单。

我读过有关使用递归循环的信息。 我知道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();

如果您会注意到,它会像预期的那样循环,但不会在数组中添加项目。 我也尝试过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([]);

现在,您从一个空数组开始,对于每个递归调用,它将向前传递相同的数组。

另外,我对其进行了更改,以使其在if()条件下不使用.pop() ,否则在编写时将始终以空数组结尾。 .pop()方法实际上删除了最后一项。)

最后,确保在加载DOM之后不使用document.write 如果是这样,则需要将其更改为使用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([]);

您的while循环不起作用的原因很可能是由于原始的.pop()问题。

您的函数在每次循环/递归时都会重新创建var array = []。 我不确定递归是否是适合您的情况的合适工具-似乎不是这样-但是,如果您开始使用JavaScript /开发并尝试一下,那么您就可以了。

虽然“无限循环”可能是您真正想要的(因为这可能会使代码更简单),但是您可以通过递归来实现此目的,方法是默认设置数组并将其作为参数传递给函数。 像这样

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调用时,无论如何都会打印一个空数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM