JavaScript에는 배열 조합을 구하는 내장 메서드가 따로 없기 때문에, 직접 함수를 작성해야 합니다. 이 글에서는 제너레이터(Generator) 함수를 활용해 배열 요소의 모든 조합을 생성하는 방법을 살펴보겠습니다.
예제
다음은 재귀 호출과 yield* 문법을 사용한 조합 생성 코드입니다.
function combination(values) {
function * combinationRepeat(size, v) {
if (size)
for (var chr of values)
yield * combinationRepeat(size - 1, v + chr);
else yield v;
}
return [...combinationRepeat(values.length, "")];
}
var output = combination([4,5]);
console.log(output);코드 동작 원리
내부 함수 combinationRepeat는 제너레이터 함수로 선언되었습니다. 크기(size)가 남아 있는 동안 배열의 각 요소를 현재 값(v) 뒤에 붙여가며 자기 자신을 재귀적으로 호출하고, 크기가 0이 되면 완성된 문자열을 yield로 반환합니다. 최종적으로 스프레드 연산자(...)를 통해 제너레이터가 생성한 모든 값을 배열로 변환하여 반환합니다.
프로그램 실행 방법
위 프로그램을 실행하려면 Node.js 환경에서 아래 명령어를 입력합니다.
node fileName.js
여기서는 파일 이름을 demo306.js로 저장했습니다.
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
PS C:\Users\Amit\javascript-code> node demo306.js [ '44', '45', '54', '55' ]
출력 결과를 보면 입력 배열 [4, 5]의 길이와 같은 크기(2자리)의 중복 허용 조합인 44, 45, 54, 55가 모두 생성된 것을 확인할 수 있습니다.