[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
반응형
TAGS.

Comments