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

递归函数调用后循环停止执行-javascript,javascript,recursion,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++) {

我试图构造一个函数,它可以生成一个包含所有可能排列的数组,而不需要重复给定数组中的字符。问题在于,当递归调用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);
    }
}
}
此函数将创建新数组并填充旧数组

阅读更多关于


我删除了我的答案,因为它不足以满足您的需要,但这正是您想要做的。检查一下,看看是否可以复制结果/修改代码。@Kevin谢谢你的帮助!我希望这是一个这样的问题。谢谢!!
Array.from(oldArray|oldSet)