Combination in JS

서재환·2021년 8월 2일
0

JavaScript

목록 보기
2/25

조합 코드 작성하기

var arr = [1, 2, 3, 4]

const func = function(arr, selectNumber) {
  const results = [];
  
  if(selectNumber === 1) return arr.map((el) => [el]);
  
  arr.forEach((fixed, index, arr) => {
    const new_arr = arr.slice(index+1)
    const combination = func(new_arr, selectNumber -1);
    
    const attached = combination.map((el) => [fixed, ...el]);
    results.push(...attached);
  });
  return results
};

func(arr, 2)

코드설명

  1. 함수 표현식으로 함수 func을 작성해준다. 인자로는 전역 배열과 depth를 받는다. 여기서 depth는 함수를 호출하는 횟수와 관련이 있다.

  2. 기저 조건은 목표로 하는 depth에 도달했을 때 그 때의 배열 내에 있는 원소를 순회해서 배열에 담은 원소들을 반환한다. 결과적으로 한개의 원소 또는 원소가 없는 배열을 반환 할 것이다.

  3. 전역 배열에 대해서 forEach 메서드로 원소 한개씩 순회한다. 인덱스를 1증가 시켜 새로운 배열을 만들고 다시 함수를 호출하는데 이 때 인자로 새로만든 배열과 새로운 depth를 넣어준다. 예를 들어 초창기 depth가 2인 경우 앞에서부터 1개의 원소를 제외한 배열([2, 3, 4])이 새로운 배열로의 인자로 들어가고 1이 새로운 depth인자로 들어갈 것이다. 그리고 결과적으로 원소[2], [3], [4]를 반환시킬 것이다.

  4. 이후 반환시킨 배열에 대한 결과값에 map 메서드를 적용시켜 각 원소에 대해 앞서 고정시킨 fixed의 값을 붙여 새로운 배열 results에 push할 것이다. [2], [3], [4] 반환시 fixed가 1이기 때문에 [1,2], [1,3], [1,4]를 results에 push할 것이다.

  5. arr.forEach에 의해 fixed = 1에서 fixed가 2, 3, 4로 차례차례 진행 하면서 결과적으로 [ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ] ]을 반환할 것이다.

0개의 댓글