1. ホーム
  2. javascript

[解決済み] JavaScriptで複数の配列のデカルト積をする

2022-05-09 10:17:46

質問

JavaScriptで複数の配列のデカルト積を実装するには?

例として

cartesian([1, 2], [10, 20], [100, 200, 300]) 

を返す必要があります。

[
  [1, 10, 100],
  [1, 10, 200],
  [1, 10, 300],
  [2, 10, 100],
  [2, 10, 200]
  ...
]

解決方法は?

ここでは、この問題に対する機能的な解決策を紹介します(何もせずに ミュータブル変数 を使用します。 reduceflatten で提供されます。 underscore.js :

function cartesianProductOf() {
    return _.reduce(arguments, function(a, b) {
        return _.flatten(_.map(a, function(x) {
            return _.map(b, function(y) {
                return x.concat([y]);
            });
        }), true);
    }, [ [] ]);
}

// [[1,3,"a"],[1,3,"b"],[1,4,"a"],[1,4,"b"],[2,3,"a"],[2,3,"b"],[2,4,"a"],[2,4,"b"]]
console.log(cartesianProductOf([1, 2], [3, 4], ['a']));  
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"></script>

備考 この解決策は http://cwestblog.com/2011/05/02/cartesian-product-of-multiple-arrays/