상세 컨텐츠

본문 제목

Javascript 재귀 함수문제(8) - flattenArr

Programming Language/JavaScript

by Yongari 2022. 12. 11. 11:37

본문

문제

다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.

입력

arr : 양의 정수 또는 배열을 요소로 갖는 다차원 배열 (입출력 예시 참고)


출력
배열을 리턴해야 합니다.



입출력 예시

let output = flattenArr([[1], 2, [3, 4], 5]);
console.log(output); // --> [1, 2, 3, 4, 5]

output = flattenArr([[2, [[3]]], 4, [[[5]]]]);
console.log(output); // --> [2, 3, 4, 5]

 

풀이코드 설명

function flattenArr(arr) {
  // 말그대로 다차원 배열을 1차원 배열형태로 만들어주는 재귀함수 코드다. 
  // 배열의 크기가 0이면 빈 배열을 반환하기
  if (arr.length === 0){
    return [];
  }
  //헤드변수에 arr 배열의 첫번째 변수를 지정
  const head = arr[0]
  //삼항연산자 개념을 사용했다. 
  // tail이 arr의 배열의 길이 1과 같으면 []빈 배열 반환 같지 않을 경우 2번째 요소부터 배열선언
  const tail = arr.length === 1 ? [] : arr.slice(1); 

  // Array의 isArray을 호출해서 배열이 맞는지 체크 
  //배열이 맞으면 다시 flattenArr을 호출하면서 재귀함수 호출
  //arr의 첫번쨰요소와 두번쨰부터 마지막까지의 요소들을 인자로 넣고 합치기
  if(Array.isArray(head)){
    return flattenArr(head.concat(tail));
  }
  //인자만 있는 head에 배열형태로 넣어준뒤 재귀함수 호출
  else{
    return [head].concat(flattenArr(tail));
  }
  
}

관련글 더보기