2017-05-14 14 views
-2

これはどこかで答えられたと確信していますが、純粋なJSのこの特定の問題の答えは見つかりません。私はどのようにallPossibilities変数と私はまた、「順列」のように、これらすべての数学の用語について十分に知っていないことを生成するためには考えているというように、正確にこれを定義するためにJS - 指定された配列で作成された可能な配列をループする

function testAllPossibilities(array, callback) { 
    //example array = [Obj1,Obj2]; 
    //allPossibilites = [[Obj1],[Obj2],[Obj1,Obj2],[Obj2,Obj1]] 
    for (var i = 0; i < allPossibilites.length; i++) { 
     callback(allPossibilites[i]); 
    } 
} 


は、私はこのような機能を必要とします質問...それはおそらく私がこれまでの答えを見つけることができなかった理由です。

allPossibilitiesするために、いくつかの複数の単語:
がそれぞれ異なる順序の可能性があるべき、そして長さが1と配列の長さが、同じ要素のない反復の間であるべきです。

+0

あなたは '[1,2,3]'の配列を持っている場合、どのような組み合わせが必要ですか? –

+0

'[1]、[2]、[3]、[1,2]、[2,1]、[1,3]、[3,1]、[2,3]、[3,2] [1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]、[3,2,1] ' –

+0

私はこれをまっすぐにする - あなたは順列を望むが、順列について学ぶことは望まない? –

答えて

1
function combinate (array) { 
    const possibilities = new Set(); 

    function lookup (possible) { 
    if possible.length { 
     possibilities.add(possible); 
    } 

    const p = new Set(possible); 
    const further = array.filter(el => !p.has(el)); 

    for (let entry of further) { 
     lookup(possible.concat(entry)); 
    } 
    } 

    lookup([]); 

    return Array.from(possibilities); 
} 

8つ以上の要素でこれを実行しないでください。

+0

ありがとう、私はこれまでに探していた結果をくれました! 私は後であなたのコードを勉強して、あなたがどのように正確にそれをしたのかを知っています - 私は決して 'Set'と' let'を使ったことはありません。 :) –

関連する問題