Flat은 평평한이라는 뜻이다. 서브웨이에 가면 먹을 수 있는 플랫 브레드의 플랫이 바로 Flat이다. 그렇다면 Flatten은? 평평하게 하다, 평탄화 하다 라는 뜻이다.
보통 어떤 배열의 깊이가 2 이상인 중첩 배열의 구조를 가지고 있을 때, 깊이를 1로 만들면서 요소는 유지하고 싶을 때 Flatten 기법을 사용한다.
Js의 메서드 중 이걸 쉽게 해주는 것이 있다. 바로 Array.flat()
이다.
const 졸라중첩된어레이 = [1,[2,[3,[4,[5]]]]];
const 한번_평탄화 = 졸라중첩된어레이.flat(); // [1,2,[3,[4,[5]]]]
// flat()의 인자로 얼마나 평탄화를 해줄지 숫자로 적어주면 그만큼 flat()이 적용된다.
const 두번_평탄화 = 졸라중첩된어레이.flat(2): // [1,2,3,[4,[5]]]
// Infinity를 사용해 무조건 1 Depth를 가진 배열로 평탄화도 가능하다.
const 무한_평탄화 = 졸라중첩된어레이.flat(Infinity) // [1, 2, 3, 4, 5]
심지어 이 flat()
메서드는 배열의 빈 값(undefined
나 null
이 아닌 그냥 진짜 빈 값)을 제거해준다.
const 듬성듬성어레이 = [1, ,3, ,5, ,7];
const 자라나라머리머리 = 듬성듬성어레이.flat();
// 자라나라머리머리 : [1, 3, 5, 7]
UnFlatten
은 Flatten
의 반어 라고 생각하면 된다. (평탄 <=> 중첩)
MDN을 뒤져도 관련 내용은 나오지 않지만, 구글에 검색하면 npmjs의 Unflatten 라이브러리를 찾을 수 있다.
예시를 보아하니, 이 라이브러리는 보통 객체 타입에 적용하는 것 같다. 예시를 공유하자면,
const unflatten = require('unflatten')
unflatten({
'a.b.c': 'd'
})
/*
{
a: {
b: {
c: 'd'
}
}
}
*/
우와... 이걸 어디다 쓸 수 있을까... 그래도 기억은 해놓자 혹시 모르니..
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ