React, JavaScript

[JavaScript] 배열의 중복 요소 제거하기

택이더 2022. 9. 13. 11:08

백준 알고리즘 문제를 풀며 배열의 중복 값 제거 방법을 메모하기 위해 작성하였습니다.

 

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

1. filter(), indexOf()를 사용하여 중복을 제거하는 방법

const arr = ['i', 'im', 'it', 'no', 'no', 'but', 'more', 'more'];
console.log(arr); // ['i', 'im', 'it', 'no', 'no', 'but', 'more', 'more']

let result = arr.filter((v, i) => arr.indexOf(v) === i);
console.log(result); // ['i', 'im', 'it', 'no', 'but', 'more']

filter()는 함수 안의 callback 함수에 정의한 부분에 대해 true로 반환되는 요소만을 배열로 반환합니다.

그후, indexOf()는 입력 값이 해당 배열에서 가장 처음 나타나는 index를 알려줍니다.

 

index가 현재 검사하고 있는 요소의 index와 일치하면 처음 발견된 요소이므로 true를 반환하고,

일치하지 않으면 false를 반환하여 배열에서 걸러저 중복이 제거됩니다.

 

 

2. ES6 문법의 Set() 함수를 사용하는 방법

const arr = ['i', 'im', 'it', 'no', 'no', 'but', 'more', 'more'];
console.log(arr); // ['i', 'im', 'it', 'no', 'no', 'but', 'more', 'more']

let result = [...new Set(arr)];
console.log(result); // ['i', 'im', 'it', 'no', 'but', 'more']

result = Array.from(new Set(arr));
console.log(result); // ['i', 'im', 'it', 'no', 'but', 'more']

Set()유니크한 값만을 담을 수 있기 때문에 배열을 Set 형태로 만들어 중복을 제거하고,

배열 안에서 전개연산자(...)를 사용하여 중복이 제거된 배열로 만들거나,

Array.from()을 사용하여 중복이 제거된 Set으로부터 배열로 만들 수 있습니다.

 

 

 

이상으로 배열의 중복 요소를 제거하는 방법에 대해 정리해보았습니다.

감사합니다.