JS 배열에서 중복 항목을 제거하는 6가지 방법

小云云
풀어 주다: 2018-03-07 13:22:57
원래의
2019명이 탐색했습니다.

방법 1:

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

같은 값이 있으면 건너뛰고, 같지 않으면 배열에 밀어 넣습니다.

이 글 주로 6가지 유형의 JS 배열을 공유합니다. 중요한 방법입니다. 모두에게 도움이 되기를 바랍니다.

Array.prototype.distinct =function(){
 vararr = 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]);
 }
 returnresult;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();   //返回[3,4,2,1]
로그인 후 복사

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

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

값이 동일하면 이 값을 삭제하세요

참고 : 요소를 삭제한 후 배열의 길이를 1만큼 줄여야 합니다.

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: 불가능한 개체의 속성을 사용합니다. 중복을 제거하려면 동일해야 합니다

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: 배열 재귀 중복 제거

재귀 개념 사용

먼저 정렬하고 마지막부터 비교합니다. 동일하면 삭제

Array.prototype.distinct = function (){
 var arr = this,
  len = arr.length;
 arr.sort(function(a,b){  //对数组进行排序才能方便比较
  return a - b;
 })
 function loop(index){
  if(index >= 1){
   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

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 구조를 배열로 변환

function dedupe(array){
 return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]
로그인 후 복사

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

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)]; 
console.log(resultarr); //[1,2,3]
로그인 후 복사

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

1. concat() 메서드

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

function concatArr(arr1, arr2){
  var arr = arr1.concat(arr2);
  arr = unique1(arr);//再引用上面的任意一个去重方法
  return arr;
}
로그인 후 복사

2. Array.prototype.push.apply()

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

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);
//也等效于[].push.apply(a, b); 
function concatArray(arr1,arr2){
  Array.prototype.push.apply(arr1, arr2);
  arr1 = unique1(arr1);
  return arr1;
}
로그인 후 복사

관련 권장 사항:

js 배열 중복 제거 및 디플래팅에 대한 자세한 설명

JavaScript 및 Python 배열 중복 제거 구문 분석

JavaScript 배열 중복 제거의 여러 방법 공유

위 내용은 JS 배열에서 중복 항목을 제거하는 6가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!