첫 번째는 좀 더 전통적인 방법입니다
사물:
1. 결과를 저장할 새 배열을 구성합니다
2. for 루프가 실행될 때마다 원래 배열에서 하나의 요소를 꺼내고 이 요소는 루프와 결과 배열을 비교하는 데 사용됩니다
3. 요소가 결과 배열에 없으면 결과 배열에 저장합니다.
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i ){
varpeat = false;
for(var j = 0; j < res.length; j ){
if(this[i] == res[j] ){
반복 = true;
중단;
}
}
if(!repeat){
res.push(this[i]);
}
}
res 반환 ;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1 , 0]
alert(arr.unique1 ());
위의 방법보다 두 번째 방법이 더 효율적입니다
사물:
1. 원본 배열을 먼저 정렬하세요
2. 원본 배열의 i번째 요소가 결과 배열의 마지막 요소와 동일한지 확인하세요. 정렬되었으므로 중복된 요소가 인접한 위치에 있게 됩니다.
3. 동일하지 않으면 결과 배열에 요소를 저장합니다.
Array.prototype.unique2 = function(){
this.sort(); //먼저 정렬
var res = [this[0]];
for(var i = 1; i < this.length; i ){
if(this[i] !== res[res.length - 1]){
res.push(this[i] );
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());
두 번째 방법도 중복 제거 전에 정렬되기 때문에 특정 제한이 있으므로 최종 반환된 중복 제거 결과도 정렬됩니다. 배열 순서를 변경하지 않고 중복 항목을 제거해야 하는 경우 이 방법은 권장되지 않습니다.
세 번째 방법(권장)
사물:
1. 결과를 저장할 새 배열을 만듭니다
2. 빈 개체를 만듭니다
3. for 루프 중에 요소를 꺼내서 개체와 비교할 때마다 요소가 반복되지 않으면 동시에 이 요소의 내용이 사용됩니다. 객체의 속성으로 1. 값이 할당되어 2단계에서 생성된 객체에 저장됩니다.
설명: 비교하는 방법은 매번 원래 배열에서 하나의 요소를 가져온 다음 개체에서 이 속성에 액세스하는 것입니다. 값에 액세스할 수 있으면 반복된다는 의미입니다.
Array.prototype.unique3 = function() {
var res = [];
var json = {};
for(var i = 0; i < this.length; i ){
if(!json[this[i ]]) {
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,'Hello',112,112,34,'Hello','str','str1'];
alert(arr.unique3());