>  기사  >  웹 프론트엔드  >  JS 배열 중복 제거 방법 요약

JS 배열 중복 제거 방법 요약

小云云
小云云원래의
2018-03-17 16:36:021693검색

이 기사에서는 주로 JS 배열 중복 제거 방법을 요약하여 공유합니다. 이 방법이 모두에게 도움이 되기를 바랍니다.

가장 쉬운 방법:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


var arr=[2,8,5,0,5,2,6,7,2];
function Unique1(arr){
  var hash=[];
for ( var i = 0; i < arr.length; i++) {
     if(hash.indexOf(arr[i])==-1){
      hash.push(arr[i]);
     }
  }
  반환 해시;

}


방법 1:

이중 레이어 루프, 외부 루프 요소, 내부 루프 중 값 비교

같은 값이 있으면 건너뛰고, 없으면 배열로 푸시합니다

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


Array.prototype.distinct = function(){

var arr = this,

result = [],

i,

j,

len = arr.length;

for(i = 0; i < len; i++){

for(j = i + 1; j < len; j++){

if(arr[i] === arr[j]){

j = ++i;

}

}

result.push(arr[i]);

}

return result;

}

var arra = [1,2,3,4,4,1,1,2,1,1,1];

arra.distinct(); //返回[3,4,2,1]

방법 2: 스플라이스를 사용하여 원본 배열에서 직접 작업

이중 레이어 루프, 외부 루프 요소, 내부 루프 중 값 비교

값이 동일하면 값 삭제

참고: 요소 삭제 그 후에는 배열 길이를 1씩 줄여야 합니다.

8

9

10

11

12

13

14

15

16

17

18

19


Array.prototype.distinct = function (){

var arr = this,

i,

j,

len = arr.length;

for(i = 0; i < len; i++){

for(j = i + 1; j < len; j++){

if(arr[i] == arr[j]){

arr.splice(j,1);

len--;

j--;

}

}

}

return arr;

};

var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];

var b = a.distinct();

console.log(b.toString()); //1,2,3,4,5,6,56

장점: 간단하고 이해하기 쉬움

단점: 메모리 사용량이 많고 속도가 느림

방법 3: 동일할 수 없는 개체의 속성을 사용하여 중복 제거

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


Array.prototype.distinct = function (){

var arr = this,

i,

obj = {},

result = [],

len = arr.length;

for(i = 0; i< arr.length; i++){

if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了

obj[arr[i]] = 1;

result.push(arr[i]);

}

}

return result;

};

var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];

var b = a.distinct();

console.log(b.toString()); //1,2,3,4,5,6,56

방법 4: 배열의 재귀적 중복 제거

재귀적 아이디어 사용

먼저 정렬한 다음 끝부터 비교하여 동일하면 삭제합니다


?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20


Array.prototype.distinct = function (){

var arr = this,

len = arr.length;

arr.sort(function(a,b){ //对数组进行排序才能方便比较

return a - b;

})

function loop(index){

if(index >= 1){</span></strong></span></span></p> <p class="line number9 index8 alt2" style="line-height:15.4px;margin:0px;padding:0px 1em;background-image:none;border:0px;float:none;height:auto;vertical-align:baseline;width:auto;min-height:auto;white-space:pre;"><code class="js spaces" style="margin:3px auto 0px;padding:0px 0px 0px 5px;background:rgb(255,255,255);border-left:3px solid rgb(108,226,108);width:640px;font-size:14px;clear:both;border-top:0px;border-right:0px;border-bottom:0px;float:none;height:auto;vertical-align:baseline;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;">   if(arr[index] === arr[index-1]){

    arr.splice(index,1);

   }

   loop(index - 1); //递归loop函数进行去重

  }

 }

 loop(len-1);

 return arr;

};

var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];

var b = a.distinct();

console.log(b.toString());  //1,2,3,4,5,6,45,56

방법 5: indexOf 및 forEach 사용

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


Array.prototype.distinct = function (){

 var arr = this,

  result = [],

  len = arr.length;

 arr.forEach(function(v, i ,arr){  //这里利用map,filter方法也可以实现

  var bool = arr.indexOf(v,i+1);  //从传入参数的下一个索引值开始寻找是否存在重复

  if(bool === -1){

   result.push(v);

  }

 })

 return result;

};

var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];

var b = a.distinct();

console.log(b.toString()); //1,23,2,3

방법 6: ES6의 set

Set 데이터 구조를 사용합니다. 이는 배열과 유사하며 해당 멤버의 값은 모두 고유합니다.

Array.from을 사용하여 Set 구조를 배열로 변환

?

1

2

3

4


function dedupe(array){

 return Array.from(new Set(array));

}

dedupe([1,1,2,3]) //[1,2,3]

스프레드 연산자(...)는 내부적으로 for...of 루프를 사용합니다

1
2

3


let resultarr = [...new Set(arr)];

console.log(resultarr); //[1,2,3]

다음은 배열 병합 및 중복 제거 방법에 대한 보충 소개입니다

1. concat() 메서드

아이디어: concat() 메서드는 들어오는 배열 또는 배열이 아닌 값을 원래 배열을 형성하여 새 배열이 반환됩니다. 이 방법은 새로운 배열을 생성합니다.


1

2

3

4

5


function concatArr(arr1, arr2){

  var arr = arr1.concat(arr2);

  arr = unique1(arr);//再引用上面的任意一个去重方法

  return arr;

}

2. Array.prototype.push.apply()

아이디어: 이 방법의 장점은 새 배열을 생성하지 않는다는 것입니다.

?

1

2

3

4

5

6

7

8

9

10


var a = [1, 2, 3];var a = [1, 2, 3];

var b = [4, 5, 6];

Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]

//等效于:a.push.apply(a, b);

var b = [4, 5, 6];

Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]🎜

//等效于:a.push.apply(a, b);🎜

//也等效于[].push.apply(a, b);

function concatArray(arr1,arr2){

  Array.prototype.push.apply(arr1, arr2);

  arr1 = unique1(arr1);

Related Related 권장 사항 : 6 JS Sharing의 Array 중복 제거 예제 6 JS 배열 중복 제거 메소드 javaScript 배열 중간 복제의 여러 방법을 공유합니다.

위 내용은 JS 배열 중복 제거 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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