2이상의 깊이를 가진 배열을 일차원 배열로 평탄화 해보자

K00·2022년 9월 20일
0
post-thumbnail

방법1. flat()

flat() 메서드에 Infinity 인자가 주어지면
하나의 배열만 남기고 모든 배열들을 평탄화 하게된다.

let arr = [[0,[1],[2,[3,[6],[13,[16],[17],[19]],[14]],[4,[12]],[5,[7,[10,[15]]],[8],[18]],[9,[11]]]]]

console.log(arr.flat(Infinity));

// 결과 [
     0,  1,  2,  3,  6, 13, 16,
    17, 19, 14,  4, 12,  5,  7,
    10, 15,  8, 18,  9, 11
  ]

방법2. Reduce + 재귀함수

const arr = [[0,[1],[2,[3,[6],[13,[16],[17],[19]],[14]],[4,[12]],[5,[7,[10,[15]]],[8],[18]],[9,[11]]]]]
    
    function flatArr(input) {
      return input.reduce((inputArr , inputToFlat) => {
    
        return inputArr.concat(
          Array.isArray(inputToFlat) ? flatArr(inputToFlat) : inputToFlat
        )
    
      },[])
    }
    
    console.log(flatArr(arr));
// 결과 [
     0,  1,  2,  3,  6, 13, 16,
    17, 19, 14,  4, 12,  5,  7,
    10, 15,  8, 18,  9, 11
  ]
  1. reduce의 cur(= inputToFlat)이 배열인지 확인Array.isArray(inputToFlat) 배열이라면
    배열이 아닌 값이 나올때까지 계속 재귀를 돌림flatArr(inputToFlat)
  2. 배열이 아니라면 누산된(acc)값(=inputArr)에 추가함 inputArr.concat()

0개의 댓글