2017-07-19 19 views
0

私は、指定された配列内の文字を繰り返さずにすべての可能な並べ替えの配列を作る関数を作成しようとしています。問題は、recur()の再帰呼び出しが行われたときに、forループの残りの部分が実行されず、結果としてvar合計が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); 

'[AB'、 'BA']

合計=をしなければならない、私は見ていないんだか、私がしようとしているどのような何かがあります([a、b]は、 ')' RECURを呼び出しますそうすることは許されません。私はたくさんの検索をしましたが、これに対する答えを見つけることができませんでした。

+0

それはあなたが必要なもののために十分ではなかったので、私は私の答えを削除しましたが、(HTTPS [ここでSOの質問があります] :/stackoverflow.com/questions/39927452/recursively-print-all-permutations-of-a-string-javascript)あなたがやろうとしていることをします。それをチェックして、結果を複製したり、コードを修正できるかどうかを確認してください。 – Kevin

+0

@ケビンは助けてくれてありがとう! – Manuel

答えて

0

JSで、すべてのオブジェクトがreferancesで、var temp = arr;を書くので、あなたはそれが新しい配列を作成しませんループ

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); 
    } 
} 
} 

のための各ステップで、あなたの配列をコピーする必要があり、それだけで古い配列への参照を作成しますarr

Array.from(oldArray|oldSet) 

この関数は、新しい配列を作成し、古いものを埋め込みます。

読むよりおよそ

+0

私はそれがこの種の問題であることを望んでいました。どうもありがとう!! – Manuel

関連する問題