2017-01-29 9 views
0

、私は数字と配列の配列を持っている、と私はそれを平らにしたい、のは、言ってみましょう:ネストされた配列のすべての可能な組み合わせを探す

[1, [2, [3]] -> [1, 2, 3] 

それは簡単です。

[1, [2, [3, 4]], [3, [4, [5, 6]], [7]] -> [[1, 2, 3], [1, 2, 4], [1, 3, 4, 5], [1, 3, 4, 6], [1, 3, 7] 
:さて、私はこのような構造で複雑な予測不可能と可能性の高い順をサポートして苦労してるように任意の時点で、

[a, [b, c]] -> [[a, b], [a, c]] 

、ことを、私はすべての可能な組み合わせを見つけたい、のは言わせて

それは間違いなくマップ/縮小可能な問題ですが、私はそれの周りに私の頭を包むことはできません。

+1

あなたは何をしようとしたのですか? – epascarello

+0

これは非常に興味深い質問ですが、何かを試したことがあるかどうかを確認するといいでしょう:D – briosheje

+0

もう一度提供した例を確認してください!あまり意味がありません。 (なぜ[1]は '[1,3,4,5]'に含まれていますか?) –

答えて

1

実際の反復配列に配列が見つからない場合にのみ、反復的および再帰的アプローチを使用してすべての部分を収集してプッシュできます。

function combine(array) { 
 
    var result = []; 
 
    array.forEach(function iter(r, p) { 
 
     return function (a, _, aa) { 
 
      if (Array.isArray(a)) { 
 
       a.forEach(iter(r, p + 1)); 
 
       return; 
 
      } 
 
      r = r.slice(0, p); 
 
      r[p] = a; 
 
      aa.some(Array.isArray) || result.push(r); 
 
     }; 
 
    }([], 0)); 
 
    return result; 
 
} 
 

 
console.log(combine([1, [2, [3]]]));       // [[1, 2, 3]] 
 
console.log(combine(['a', ['b', 'c']]));      // [["a", "b"], ["a", "c"]] 
 
console.log(combine([1, [2, [3, 4]], [3, [4, [5, 6]], [7]]])); // [[1, 2, 3], [1, 2, 4], [1, 3, 4, 5], [1, 3, 4, 6], [1, 3, 7]]
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

これは完全に定義された問題ではなく、与えられたデータから、私は与えられた入力セットのためだけで正常に動作し、次の答えを考え出す可能性があり、暗黙の組み合わせのために[OK]を行う必要があります質問の背後にある論理。

var arr = [1, [2, [3, 4]]], 
 
    brr = [1, [2, [3, 4]], [3, [4, [5, 6]], [7]]], 
 
flatNest = (a,p = []) => a.reduce((r,e,i,b) => Array.isArray(e) ? Array.isArray(b[i-1]) ? r.concat(flatNest(e,p)) 
 
                         : r 
 
                   : Array.isArray(b[i+1]) ? (r.push(...flatNest(b[i+1],[e]).map(f => p.concat(f))), 
 
                          p.push(e), 
 
                          r) 
 
                         : (r.push(p.concat(e)), 
 
                          r), []); 
 
console.log(JSON.stringify(flatNest(arr))); 
 
console.log(JSON.stringify(flatNest(brr)));

関連する問題