>  기사  >  웹 프론트엔드  >  자바스크립트 배열 중복 제거 방법(4가지 유형) 상세 설명 및 예시 코드

자바스크립트 배열 중복 제거 방법(4가지 유형) 상세 설명 및 예시 코드

高洛峰
高洛峰원래의
2016-12-05 14:04:481284검색

Javascript 배열 중복 제거의 네 가지 방법

이 목적을 달성하기 위한 네 가지 알고리즘:

첫 번째 방법:

Array.prototype.unique1 = function () {
 var n = []; //一个新的临时数组
 for (var i = 0; i < this.length; i++) //遍历当前数组
 {
  //如果当前数组的第i已经保存进了临时数组,那么跳过,
  //否则把当前项push到临时数组里面
  if (n.indexOf(this[i]) == -1) n.push(this[i]);
 }
 return n;
}

두 번째 방법:

Array.prototype.unique2 = function()
{
 var n = {},r=[]; //n为hash表,r为临时数组
 for(var i = 0; i < this.length; i++) //遍历当前数组
 {
 if (!n[this[i]]) //如果hash表中没有当前项
 {
  n[this[i]] = true; //存入hash表
  r.push(this[i]); //把当前数组的当前项push到临时数组里面
 }
 }
 return r;
}
var arr = [1, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;e&#39;, 1, 0]
alert(arr.unique2());

세 번째 방법:

Array.prototype.unique3 = function()
{
 var n = [this[0]]; //结果数组
 for(var i = 1; i < this.length; i++) //从第二项开始遍历
 {
 //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
 //那么表示第i项是重复的,忽略掉。否则存入结果数组
 if (this.indexOf(this[i]) == i) n.push(this[i]);
 }
 return n;
}

첫 번째와 세 번째 메서드는 모두 배열의 indexOf 메서드를 사용합니다. 이 방법의 목적은 배열에서 저장된 매개변수가 처음으로 나타나는 것을 찾는 것입니다. 분명히, js 엔진은 이 메소드를 구현할 때 대상을 찾을 때까지 배열을 탐색합니다. 그래서 이 기능은 시간을 많이 낭비하게 됩니다. 두 번째 방법은 해시 테이블을 사용합니다. 개체의 발생을 아래 첨자 형식으로 저장합니다. 첨자 참조는 indexOf를 사용하여 배열을 검색하는 것보다 훨씬 빠릅니다.

이 세 가지 방법의 효율성을 판단하기 위해 길이가 10,000인 난수 배열을 생성하는 테스트 프로그램을 만든 후 여러 가지 방법을 사용하여 실행 시간을 테스트했습니다. 결과는 두 번째 방법이 다른 두 가지 방법보다 훨씬 빠르다는 것을 보여줍니다. 하지만 메모리 사용량 측면에서는 추가적인 해시 테이블이 있기 때문에 두 번째 방법을 사용할 가능성이 더 높습니다. 이것이 바로 시간을 위한 공간이라고 불리는 것입니다. 이것은 테스트 페이지이며, 확인해 볼 수도 있습니다.

네 번째 방법 :

Array.prototype.unique4 = function()
{
 this.sort();
 var re=[this[0]];
 for(var i = 1; i < this.length; i++)
 {
 if( this[i] !== re[re.length-1])
 {
  re.push(this[i]);
 }
 }
 return re;
}

이 방법의 아이디어는 배열을 먼저 정렬한 후 두 항목을 비교하는 것입니다. 인접 값. 정렬 시에는 JS 기본 정렬 방법을 사용합니다. JS 엔진은 내부적으로 빠른 정렬을 사용해야 합니다. 최종 테스트 결과, 이 방법의 실행 시간은 두 번째 방법에 비해 평균 3배 가량 길지만, 첫 번째와 세 번째 방법에 비해 훨씬 빠른 것으로 나타났다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.