js 배열 재 활용 방법 총화

4257 단어 JavaScript
면접 전단 에 준비 해 야 할 문제: 자바 script 의 Array 중복 항목 을 어떻게 제거 합 니까?
여기 서 몇 가지 방법 을 총 결 하 였 다.
첫 번 째 는 비교적 일반적인 방법 이다.
생각:
1. 새로운 배열 저장 결 과 를 구축 합 니 다.
2. for 순환 에서 원 배열 에서 원 소 를 꺼 낼 때마다 이 요소 순환 으로 결과 배열 과 비교 합 니 다.
3. 결과 배열 에 이 요소 가 없 으 면 결과 배열 에 저 장 됩 니 다.
 
   
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return 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,' ',112,112,34,' ','str','str1'];
alert(arr.unique3());


첫 번 째: 가장 멍청 하 죠?Array.prototype.unique1 = function () {     var r = new Array();     label:for(var i = 0, n = this.length; i < n; i++) {         for(var x = 0, y = r.length; x < y; x++) {             if(r[x] == this[i]) {                 continue label;             }         }         r[r.length] = this[i];     }     return r;} 두 번 째: 이 정규 천 서 는 같 습 니 다. Array. prototype. unique 2 = function () {    return this. sort (). join (","). replace (/ (, | ^) ([^,] +) (, \ 2) + (, | $) / g, "$1 $2 $4"). replace (/, + / g, ","). replace (/, $/, "). split (", ");} 세 번 째: 사용 대상 의 [hasOwnProperty] 방법 Array. prototype. unique 3 = function () {    var temp = {}, len = this.length;     for(var i=0; i < len; i++)  {         var tmp = this[i];         if(!temp.hasOwnProperty(tmp)) {             temp[this[i]] = "my god";         }     }        len = 0;     var tempArr=[];     for(var i in temp) {         tempArr[len++] = i;     }     return tempArr;} 네 번 째: 먼저 정렬 합 니 다. 전항 은 후 항 보다 큽 니 다. 이 방법 은 간단 하지만 실 용적 입 니 다. Array. prototype. unique 4 = function () {    var temp = new Array();       this.sort();       for(i = 0; i < this.length; i++) {           if( this[i] == this[i+1]) {             continue;         }           temp[temp.length]=this[i];       }       return temp;    }   다음은 예전 에 자주 사 용 했 던 것 이 고 효율 도 좋 습 니 다. hash 표 느낌 이 듭 니 다. Array. prototype. unique 5 = function () {    var res = [], hash = {};     for(var i=0, elem; (elem = this[i]) != null; i++)  {         if (!hash[elem])         {             res.push(elem);             hash[elem] = true;         }     }     return res; }

좋은 웹페이지 즐겨찾기