💻 Dev

🛠️ 처음부터 만드는 Uniq — 배열에서 중복 제거하기

배열에서 중복된 요소를 제거하고 고유한 값만 남기는 Uniq 함수를 구현해봅시다.

기본 구현: includes 활용


```javascript
function uniq(arr) {
const result = [];
for (const item of arr) {
if (!result.includes(item)) {
result.push(item);
}
}
return result;
}
console.log(uniq([1, 2, 2, 3, 1, 4]));
// [1, 2, 3, 4]
```
한계: O(n²) 시간복잡도. 큰 배열에서 느림.

최적화: Set 사용


```javascript
function uniq(arr) {
return [...new Set(arr)];
}
console.log(uniq([1, 2, 2, 3, 1, 4]));
// [1, 2, 3, 4]
```
장점: O(n) 시간복잡도. 대부분의 경우 이 방식이 최고.

객체 비교 지원


객체는 Set에서 참조로 비교되므로, 값 기준 비교가 필요할 땐:
```javascript
function uniqBy(arr, key) {
const seen = new Set();
return arr.filter(item => {
const val = typeof key === 'function' ? key(item) : item[key];
if (seen.has(val)) return false;
seen.add(val);
return true;
});
}
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Charlie' }
];
console.log(uniqBy(users, 'id'));
// [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
```

실전 팁


  • 소수 요소: `[...new Set(arr)]` 한 줄로 충분

  • 큰 배열 + 복잡한 비교: uniqBy 패턴 사용

  • 순서 유지: filter + Set 조합 (위 예제처럼)

  • NaN 처리: Set은 NaN을 하나로 취급 (includes는 중복 허용)

  • 더 알아보기: [MDN Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)
    💬 0
    👁 0 views

    Comments (0)

    💬

    No comments yet.

    Be the first to comment!