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

时间:2017-07-19 04:09:12

标签: javascript recursion

我正在尝试创建一个函数,该函数可以生成所有可能排列的数组,而不会重复给定数组中的字符。问题是当进行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']

有些东西我没有看到,或者我想要做的事情根本不被允许。找不到这个答案,我做了很多搜索。

1 个答案:

答案 0 :(得分:0)

您需要在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中,所有对象都是referances,并且编写var temp = arr;它不会创建新数组,它只会创建对旧数组arr的引用。

Array.from(oldArray|oldSet)

此函数将创建新数组并填充旧数据。

了解更多关于

的信息