💻 Dev

🛠️ 처음부터 만드는 Flatten — 중첩 배열을 평탄화하기

# 🛠️ 처음부터 만드는 Flatten — 중첩 배열을 평탄화하기
중첩된 배열을 한 차원의 배열로 만드는 Flatten입니다. `[1, [2, [3, 4]]]` 같은 구조를 `[1, 2, 3, 4]`로 변환합니다.

기본 구현


```javascript
function flatten(arr) {
return arr.reduce((acc, item) => {
return Array.isArray(item)
? acc.concat(flatten(item)) // 재귀 호출
: acc.concat(item);
}, []);
}
flatten([1, [2, [3, 4]], 5]); // [1, 2, 3, 4, 5]
```

깊이 제한 버전


실무에서는 무한 재귀를 피하기 위해 깊이를 제한하곤 합니다.
```javascript
function flattenDepth(arr, depth = 1) {
return arr.reduce((acc, item) => {
return depth > 0 && Array.isArray(item)
? acc.concat(flattenDepth(item, depth - 1))
: acc.concat(item);
}, []);
}
flattenDepth([1, [2, [3, 4]]], 1); // [1, 2, [3, 4]]
flattenDepth([1, [2, [3, 4]]], 2); // [1, 2, 3, 4]
```

실전: API 응답 평탄화


```javascript
const responses = [
{ id: 1, tags: ['js', 'react'] },
{ id: 2, tags: ['node'] },
];
const allTags = flatten(responses.map(r => r.tags));
console.log(allTags); // ['js', 'react', 'node']
```

표준 API


ES2019부터 `Array.prototype.flat()`이 지원됩니다:
```javascript
const result = [1, [2, [3, 4]]].flat(); // [1, 2, [3, 4]]
const result = [1, [2, [3, 4]]].flat(2); // [1, 2, 3, 4]
const result = [1, [2, [3, 4]]].flat(Infinity); // [1, 2, 3, 4]
```
자신의 구현으로 `flat()` 동작을 이해하면, 브라우저 호환성이 중요한 레거시 환경에서도 대체 함수를 만들 수 있습니다.
💬 0
👁 0 views

Comments (0)

💬

No comments yet.

Be the first to comment!