Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 m개의 요소가 있는 n개의 배열에서 조합 생성


m개의 요소가 포함된 n개의 배열에서 조합을 생성하는 JavaScript 함수를 작성해야 합니다.

예를 들어 -

이 데이터를 고려하십시오 -

const arr = [
   [0,1],
   [0,1,2,3],
   [0,1,2]
]

요소 수가 다른 3개의 하위 배열.

우리가 원하는 것은 각 배열의 항목을 결합하여 모든 조합을 얻는 것입니다.

예를 들어 -

0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2

등등.

배열의 개수가 고정되어 있다면 하드코딩된 구현을 쉽게 만들 수 있을 것입니다. 그러나 배열의 수는 다를 수 있습니다 -

const arr1 = [[0,1], [0,1]];
const arr2 = [[0,1,3,4], [0,1], [0], [0,1]];

예시

이에 대한 코드는 -

const arr = [
   [0,1],
   [0,1,2,3],
   [0,1,2]
]
const combineAll = (array) => {
   const res = [];
   let max = array.length−1;
   const helper = (arr, i) => {
      for (let j=0, l=array[i].length; j<l; j++) {
         let copy = arr.slice(0);
         copy.push(array[i][j]);
         if (i==max)
         res.push(copy);
         else
         helper(copy, i+1);
      };
   };
   helper([], 0);
   return res;
};
console.log(combineAll(arr));

콘솔의 출력은 -

[
   [ 0, 0, 0 ], [ 0, 0, 1 ],
   [ 0, 0, 2 ], [ 0, 1, 0 ],
   [ 0, 1, 1 ], [ 0, 1, 2 ],
   [ 0, 2, 0 ], [ 0, 2, 1 ],
   [ 0, 2, 2 ], [ 0, 3, 0 ],
   [ 0, 3, 1 ], [ 0, 3, 2 ],
   [ 1, 0, 0 ], [ 1, 0, 1 ],
   [ 1, 0, 2 ], [ 1, 1, 0 ],
   [ 1, 1, 1 ], [ 1, 1, 2 ],
   [ 1, 2, 0 ], [ 1, 2, 1 ],
   [ 1, 2, 2 ], [ 1, 3, 0 ],
   [ 1, 3, 1 ], [ 1, 3, 2 ]
]