JavaScript 作 ▸ 2018-12-20 19:26 2次元配列を総当たりのパターンに展開 #JavaScript // これを… const before = [['A','B'], ['C','D','E'], ['F','G']]; // こう const after = [ ['A','C','F'], ['B','C','F'], ['A','D','F'], ['B','D','F'], ['A','E','F'], ['B','E','F'], ['A','C','G'], ['B','C','G'], ['A','D','G'], ['B','D','G'], ['A','E','G'], ['B','E','G'], ]; 関数にしました。 expand/** * 2次元配列を総当たりのパターンに展開したものを返却 * @param {Array} arr - 2次元配列 * @return {Array} 展開済み1次元配列 */ const expand = (arr) => { const expandedArr = []; const len = arr.length; const ps = (new Array(len)).fill(0); let end = false; while (!end) { const elem = []; for (let i = 0; i < len; ++i) { elem.push(arr[i][ps[i]]); } expandedArr.push(elem); for (let i = 0; i < len; ++i) { if (++ps[i] < arr[i].length) { break; } else { if (i >= len - 1) { end = true; } ps[i] = 0; } } } return expandedArr; };使い方const arr = expand([['A','B'], ['C','D','E'], ['F','G']]); console.log(arr); /* -> [ 0: (3) ["A", "C", "F"] 1: (3) ["B", "C", "F"] 2: (3) ["A", "D", "F"] 3: (3) ["B", "D", "F"] 4: (3) ["A", "E", "F"] 5: (3) ["B", "E", "F"] 6: (3) ["A", "C", "G"] 7: (3) ["B", "C", "G"] 8: (3) ["A", "D", "G"] 9: (3) ["B", "D", "G"] 10: (3) ["A", "E", "G"] 11: (3) ["B", "E", "G"] ] */