자바스크립트에서 unflatten은 다음과 같은 중첩된 배열을 의미한다.
[1, [2, [3, [4]]]]
flatten은 다음과 같이 중첩이 없는 배열을 의미한다.
혹은 중첩배열을 평탄화 하는 작업을 의미한다.
[1, 2, 3, 4, 5]
flat 메서드는 인수로 전달한 깊이만큼 재귀적으로 배열을 평탄화 한다.
쉽게 이해해보자.
다음과 같은 배열이 있다.
[1, [2, [3, [4]]]]
여기서 배열을 평탄화 하는 작업은
배열의 벽[]을 부수는 작업이라 보면된다.
위에서 제시한 배열은 벽이 다음과같이
1, [ 2, [ 3, [ 4 ] ] ]
3개있다.
여기서 아래와 같이 flat 메서드를 사용해
벽을 부수는 예시를 보자.
[1, [2, 3, 4, 5]].flat() // -> [1, 2, 3, 4, 5]
일단 flat.()메서드에서 인수를 생략할 경우
1개의 벽만 부순다.
즉 인수의 기본값은 1이다.
다음은 인수에 따라 얼마나 평탄화 하는지 알 수 있는 예시이다.
// 중첩 배열을 평탄화하기 위한 깊이 값의 기본값은 1이다.
[1, [2, [3, [4]]]].flat() // -> [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(1) // -> [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(2) // -> [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat().flat() // -> [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat(Infinity) // -> [1, 2, 3, 4]
인수로 Infinity를 전달하면 모든 벽을 부순다.
(중첩 배열을 모두 평탄화한다)
또한 flat() 메서드는 다음과 같은 공백도 제거한다.
const arr5 = [1, 2, , 4, 5];
arr5.flat();
// [1, 2, 4, 5]