1

どういうわけか、私はこれで苦労しています。パズルは好きだけど、これは苦手。

次の配列は、その内部に多数のセットを持つことができますが、この例より深くなることはありません (つまり、2 次元より深くなることはありません)。

var list = [['a', 'b'], ['c'], ['d', 'e']];

上記を入力として、JavaScript で次の配列を生成するにはどうすればよいですか?

[['a', 'c', 'd'], ['a', 'c', 'e'], ['b', 'c', 'd'], ['b', 'c', 'e']]

ソリューションには再帰が含まれていると思いますが、単純なツリー構造ではないため、見た目ほど単純ではありません。

4

2 に答える 2

3

だからあなたは探している順列デカルト積?

function product(list) {
    // Keep a current index for each set
    var indices = list.map(_ => 0); // More Firefox 22 promotion :)
    indices[indices.length - 1] = -1;
    var result = [];

    while(true) {
        // Get the next permutation
        for(var i = indices.length - 1; i >= 0; i--) {
            if(++indices[i] === list[i].length) {
                indices[i] = 0;
            } else {
                break;
            }
        }

        if(i === -1) {
            // All done!
            return result;
        }

        // Turn the array of indices into an array of values
        result.push(indices.map((n, i) => list[i][n]));
    }
}
于 2013-06-30T21:27:43.420 に答える