2017-07-19 57 views
0

我試圖做一個函數,使所有可能的排列數組不重複的字符在給定的數組中。問題是,在遞歸調用recur()時,for循環的其餘部分不會執行,因此var總數由1個字符串組成。在遞歸函數調用後執行循環停止 - javascript

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], '')應該總= [ 'AB', '巴']

也有一些是我沒有看到或什麼,我想要做的根本就是不允許的。無法找到答案,甚至我做了很多搜索。

+0

我已經刪除了我的答案,因爲它是不夠的,你需要的東西。但是這裏是一個SO問題](HTTPS ://stackoverflow.com/questions/39927452/recursively-print-all-permutations-of-a-string-javascript),做你想做的事情。看看它是否可以複製結果/調整代碼。 – Kevin

+0

@凱文感謝您的幫助! – Manuel

回答

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) 

此功能將創建新的數組並填充舊的。

瞭解更多關於

+0

我希望它是這種問題。非常感謝!! – Manuel