[javascript] 중첩 배열 평탄하게 하기 (flat, concat, reduce)
728x90
반응형
javascirpt로 프론트엔드 코딩테스트 준비해야겠다 싶어서 공부하다가 배열을 평평하게 하는 방법을 다시 찾아보았다.
대표적으로 concat와 reduce, flat메서드를 쓸 수 있다. (flat메소드는 처음 봤다)
모든 결과는 [1,2,3,4,5,6]으로 동일하다.
const arr=[1,2,[3,4],[5,6]];
const flattened=arr=>[].concat(...arr);
const reduced=arr.reduce((acc,items)=>{
return acc.concat(items);
},[]);
const flatMethodUsed=arr.flat();
const test=[].concat(...arr);
console.log(flattened(arr));
console.log(reduced);
console.log(flatMethodUsed);
console.log(test);
하지만 모두 3차 이상의 중첩 배열인 경우는 깊이가 1씩 줄어드므로 여러 번 평탄화 작업을 해줘야한다.
재귀문으로 평탄화 작업을 해주는 함수를 짜야된다.
아래는 모질라에서 예시로 가져온 코드이다. 값이 배열이 아닐 때까지 재귀호출을 해준다.
출처: developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
const arr = [1, 2, [3, 4, [5, 6]]];
// to enable deep level flatten use recursion with reduce and concat
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
: arr.slice();
};
flatDeep(arr, Infinity);
// [1, 2, 3, 4, 5, 6]
참고 출처: developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
728x90
반응형
'자바스크립트_개념편' 카테고리의 다른 글
[Javascript Concept] typeof null===object 에 대한 고찰 (0) | 2020.12.08 |
---|---|
[Javascript] 자바스크립트 역사, 배경 (0) | 2020.12.04 |
[JS] 스코프 Scope (0) | 2020.11.17 |
[JS] Hoisting 호이스팅 (0) | 2020.11.17 |
[javascript] this bind, this 바인딩(어렵다 어려워) (0) | 2020.10.27 |
TAGS.