구현 아이디어: 새 배열을 만들고, 들어오는 배열을 순회한 후 새 배열에 없는 경우 값을 추가합니다. 참고: 값이 배열에 있는지 확인하는 "indexOf" 메서드는 IE8 이하에서는 지원되지 않는 ECMAScript5 방식 지원, 하위 버전의 브라우저와 호환되는 추가 코드 작성 필요:
// 가장 간단한 배열 중복 제거 방법
function Unique1( array){
var n = [] ; //새 임시 배열
//현재 배열 탐색
for(var i = 0; i < array.length; i++){
//현재 배열의 i번째가 임시 배열에 저장되어 있으면 건너뛰고,
// 그렇지 않으면 현재 항목을 임시 배열에 푸시합니다.
if (n.indexOf(array[i]) = = -1) n.push(array[i]) ;
}
return n;
}
객체 키-값 쌍 방법
구현 아이디어: 새 js 객체와 새 배열을 만들고 들어오는 배열을 순회합니다. 값이 js 객체의 키인지 확인하고, 그렇지 않은 경우 키를 객체에 추가하고 새 배열에 넣습니다. 참고: js 객체 키인지 확인할 때 "toString()"은 수신 키에서 자동으로 실행됩니다. 예를 들어 a[1], a["1"]과 같이 다른 키가 동일한 것으로 오해될 수 있습니다. 위의 문제를 해결하려면 여전히 "indexOf"를 호출해야 합니다.
// 가장 빠르고 가장 많은 공간을 차지합니다(공간은 시간으로 교환됨)
function Unique2(array){
var n = {}, r = [], len = array. length, val , type;
for (var i = 0; i < array.length; i++) {
val = array[i];
type = typeof val;
if (! n[val ]) {
n[val] = [type];
r.push(val);
} else if (n[val].indexOf(type) < 0) {
n [val].push(유형);
r.push(val);
}
}
return r;
}
배열 첨자 판단 방법
구현 아이디어: 현재 배열의 i번째 항목이 현재 배열의 i가 아닌 다른 위치에 처음 나타나면 i번째 항목이 반복되고 무시된다는 의미입니다. 그렇지 않으면 결과 배열을 저장합니다.
function Unique3(array){
var n = [array[0]]; //결과 배열
//두 번째 항목부터 순회
for(var i = 1; i < array.length; i++) {
//현재 배열에서 i번째 항목이 처음으로 나타나는 경우
//i번째 항목이 반복된다는 뜻입니다. 무시하세요. 그렇지 않으면 결과 배열을 저장합니다.
if (array.indexOf(array[i]) == i) n.push(array[i]);
}
return n;
}
정렬 후 인접 제거 방법
구현 아이디어: 들어오는 배열을 정렬하고, 정렬 후 동일한 값을 인접시킨 후 순회 시 중복되지 않는 값만 추가 이전 값을 새 배열로 복사합니다.
// 동일한 값을 서로 인접하게 배치한 다음 순회하여 중복 값을 제거합니다.
function Unique4(array){
array.sort()
var re=[array[0]] ;
for(var i = 1; i < array.length; i++){
if(array[i] !== re[re.length-1])
{
re .push(array[i]);
}
}
return re;
}
배열 순회 방법 최적화
구현 아이디어: Get 중복되지 않은 가장 오른쪽 값을 새 배열에 넣습니다. (중복된 값이 감지되면 현재 루프가 종료되고 최상위 루프의 다음 판단 라운드로 들어갑니다)
// 아이디어: 중복 없이 가장 오른쪽 값을 가져와 새 배열에 넣습니다.
function Unique5(array){
var r = [];
for(var i = 0, l = array .length; i < l; i++) {
for(var j = i + 1; j < l; j++)
if (array[i] === array[j]) j = + +i;
r.push(array[i]);
}
return r;
}