繁体   English   中英

递归函数调用后停止执行循环-javascript

[英]execution of loop stops after recursive function call - javascript

我试图做一个函数,使所有可能的排列组成一个数组,而不重复给定数组中的字符。 问题在于,当进行recur()的递归调用时,不会执行其余的for循环,结果var total由1个字符串组成。

   function recur(arr,wordArr) {
    if(arr.length == 0) {
      total.push(wordArr);
    } else {
        for(var i = 0;i < arr.length;i++) {
          var temp = arr;
          var newwordArr = wordArr;
          newwordArr += temp.splice(i, 1);
          recur(temp,newwordArr);
        }
    }
  }



  var arr = "abc".split("");
  var total = [];
  recur(arr,'');
  console.log(total);

调用recur([a,b],'')应该使total = ['ab','ba']

我看不到某些东西,或者根本不允许做我想做的事情。 我做了很多搜索,甚至找不到这个难题的答案。

您需要在for循环的每个步骤中复制数组

function recur(arr,wordArr) {
if(arr.length == 0) {
  total.push(wordArr);
} else {
    for(var i = 0;i < arr.length;i++) {
      var temp = Array.from(arr);
      var newwordArr = wordArr;
      newwordArr += temp.splice(i, 1);
      recur(temp,newwordArr);
    }
}
}

因为在JS中,所有对象都是引用,所以编写var temp = arr; 它不会创建新数组,而只会创建对旧数组arr引用。

Array.from(oldArray|oldSet)

此函数将创建新的Array并用旧的填充。

进一步了解

暂无
暂无

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

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