스택큐힙리스트

자바스크립트에서 배열의 unique() 함수 [중복] 본문

카테고리 없음

자바스크립트에서 배열의 unique() 함수 [중복]

스택큐힙리스트 2024. 1. 22. 14:38
반응형

누구나 알다시피 자바스크립트에서 배열에서 중복 항목을 제거하기 위한 내장 함수가 없습니다. 저는 이것이 제이쿼리에도 없다는 것을 알아차렸습니다(제이쿼리는 DOM 선택에 대한 고유한 함수만 가지고 있음). 그리고 가장 일반적인 스니펫은 각 요소마다 전체 배열과 그 부분집합을 확인하여 중복을 체크합니다(효율적이지 못하다고 생각됨). 다음과 같습니다:


for (var i = 0; i < arr.length; i++)
for (var j = i + 1; j < arr.length; j++)
if (arr[i] === arr[j])
//본문

그래서 저는 직접 만들었습니다:


function unique (arr) {
var hash = {}, result = [];
for (var i = 0; i < arr.length; i++)
if (!(arr[i] in hash)) { //객체와 함께 작동합니다! 적어도 FF에서는 그렇습니다
hash[arr[i]] = true;
result.push(arr[i]);
}
return result;
}

이 경우에 가장 좋은 것으로 인정된 다른 알고리즘이 있는지 궁금하고 (해결될 수 있는 명백한 결함이 있는지 또는 이를 javascript로 필요로 할 때는 어떻게 하는지 (jQuery가 유일한 프레임워크가 아닌 다른 몇몇은 이미 이를 다루고 있을 수 있음을 알고 있습니다.

답변 1

객체 리터럴을 사용하는 것이 바로 내가 할 일이다. 많은 사람들은 일반적인 배열 순회 대신에 이 기술을 많은 시간을 놓치곤 한다. 유일성에 대한 최적화는 매번 arr.length 조회를 피하는 것뿐이다. 그 외에는 O(n)이 유일성에 대해서는 얻을 수 있는 최선이며, 원래 O(n^2) 예제보다 훨씬 좋다.


function unique(arr) {
var hash = {}, result = [];
for ( var i = 0, l = arr.length; i < l; ++i ) {
if ( !hash.hasOwnProperty(arr[i]) ) { // 객체인 경우도 작동한다! 최소한 FF에서는
hash[ arr[i] ] = true;
result.push(arr[i]);
}
}
return result;
}
// * 댓글을 고려하여 hasOwnProperty를 사용하도록 수정함

시간 복잡도 요약

  f()    | 정렬되지 않음 | 정렬됨 | 객체 | 스칼라 | 라이브러리
____________________________________________________________
unique | O(n) | O(n) | 아니오 | 예 | 없음
original | O(n^2) | O(n^2) | 예 | 예 | 없음
uniq | O(n^2) | O(n) | 예 | 예 | 프로토타입
_.uniq | O(n^2) | O(n) | 예 | 예 | 언더스코어

대부분의 알고리즘과 마찬가지로, 트레이드오프가 있습니다. 스칼라 값만 정렬해야 한다면, 원래 알고리즘을 수정하면 최적의 해결책을 얻을 수 있습니다. 그러나 비 스칼라 값도 정렬해야 한다면, 논의된 라이브러리 중 하나의 uniq 메서드를 사용하거나 모방하는 것이 가장 좋은 선택입니다.

답변 2

unique() 는 자바스크립트에서 배열에 대해 사용되는 함수 중 하나입니다. 이 함수는 배열의 중복된 요소를 제거하여 고유한 요소들만으로 이루어진 새로운 배열을 생성합니다. 지난 글에서는 unique() 함수에 대한 간단한 설명을 찾을 수 있었습니다. 이번에는 그에 대해 좀 더 자세히 알아보고자 합니다.
unique() 함수는 자바스크립트의 내장 함수는 아니지만, 많은 사람들이 배열에서 중복된 요소들을 제거하기 위해 자주 사용하는 함수입니다. 이 함수는 배열에 forEach() 메소드를 사용하여 배열의 요소들을 반복하면서 고유한 요소만을 새로운 배열에 추가하는 방식으로 작동합니다.
이 함수를 사용하여 중복된 요소를 제거한 배열을 얻기 위해서는 다음과 같이 작성할 수 있습니다.
```javascript
function unique(array) {
const uniqueArray = [];
array.forEach(function(element) {
if (!uniqueArray.includes(element)) {
uniqueArray.push(element);
}
});
return uniqueArray;
}
```
unique() 함수는 먼저 빈 배열인 uniqueArray를 선언하여 고유한 요소들을 담을 준비를 합니다. 이후에는 forEach() 메소드를 사용하여 입력된 배열의 요소들을 반복하면서 각 요소가 uniqueArray에 이미 포함되어 있는지를 체크합니다. 만약 uniqueArray에 이미 포함되어 있지 않다면, 해당 요소를 uniqueArray에 추가합니다.
이렇게 unique() 함수를 사용하면 중복된 요소가 제거된 배열을 얻을 수 있게 됩니다. 예를 들어, 다음과 같이 중복된 요소를 포함한 배열이 있다고 가정해봅시다.
```javascript
const array = [1, 2, 3, 4, 1, 2, 3, 5];
```
위 배열에서 unique() 함수를 사용하면 다음과 같이 중복된 요소가 제거된 배열을 얻게 됩니다.
```javascript
const uniqueArray = unique(array);
console.log(uniqueArray); // [1, 2, 3, 4, 5]
```
uniqueArray는 [1, 2, 3, 4, 5]와 같이 중복된 요소들이 제거되어 고유한 요소들만으로 이루어진 배열을 담고 있습니다.
이렇게 unique() 함수를 사용하면 배열에서 중복된 요소를 쉽게 제거할 수 있습니다. 이 함수는 유용하게 활용될 수 있으며, 프로그래밍 작업을 보다 효율적으로 만들어 줄 수 있습니다. 유의미한 데이터 처리 작업이 필요한 웹사이트나 애플리케이션을 개발하는 경우 unique() 함수를 적절히 활용하여 중복된 데이터를 처리할 수 있습니다. 중복된 데이터는 정확한 분석이나 작업에 방해가 되기 때문에 이 함수를 잘 활용하는 것은 매우 중요합니다.
이상으로 unique() 함수에 대한 간단한 소개와 사용방법을 소개해보았습니다. 이 함수를 활용하여 배열에서 중복된 요소를 제거하는 방법을 익히고 다양한 프로그래밍 작업에 활용해보세요.

반응형
Comments