반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 컴퓨터비전
- 머신러닝
- 웹개발
- 2
- 딥러닝
- 알고리즘
- Yes
- 자바스크립트
- 프로그래밍언어
- 소프트웨어
- 사이버보안
- 데이터베이스
- 코딩
- 버전관리
- 빅데이터
- 인공지능
- I'm Sorry
- 네트워크보안
- 클라우드컴퓨팅
- 데이터분석
- 컴퓨터과학
- 보안
- 데이터과학
- 네트워크
- 파이썬
- 프로그래밍
- 자료구조
- 컴퓨터공학
- 소프트웨어공학
- 데이터구조
Archives
- Today
- Total
스택큐힙리스트
자바스크립트에서 배열의 unique() 함수 [중복] 본문
반응형
누구나 알다시피 자바스크립트에서 배열에서 중복 항목을 제거하기 위한 내장 함수가 없습니다. 저는 이것이 제이쿼리에도 없다는 것을 알아차렸습니다(제이쿼리는 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