>  기사  >  웹 프론트엔드  >  JavaScript 배열에서 중복 항목을 제거하는 네 가지 방법에 대한 자세한 설명

JavaScript 배열에서 중복 항목을 제거하는 네 가지 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-22 10:04:551434검색

배열 중복 제거의 일반적인 요구 사항은 배열을 제공하고, 중복 제거 메서드를 호출하고, 값의 복사본을 반환하는 것입니다. 복사본에는 중복된 요소가 없습니다. 아래에서 Script House의 편집자는 js 배열에서 중복 항목을 제거하는 다양한 방법을 제공합니다. 이 방법이 필요한 친구는

배열 중복 제거를 참조할 수 있습니다. 일반적인 요구 사항은 중복 제거를 호출하는 것입니다. 메서드를 실행하고 값의 복사본을 반환하면 복사본에 중복된 요소가 없습니다. 일반적으로 === 비교를 통해 true를 반환하는 두 요소는 동일한 요소로 간주되어 중복 제거가 필요합니다. 따라서 1과 "1"은 다른 요소이고, 1과 new Number(1)은 다른 요소입니다. }와 {}는 다른 요소(다른 참조)입니다. (물론, {}와 {}가 동일한 요소로 간주되어야 하는 경우 솔루션은 달라집니다.)

방법 1

이중 루프 사용


function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
  var item = arr[i];
  for(var j = 0, jLen = res.length; j<jLen; j++) {
   if(item == res[j]) break;
  }
  if(j == jLen) res.push(item);
 }
 return res;
}

방법 2


function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (ret.indexOf(item) === -1) {
  ret.push(item)
 }
 }
 return ret
}

여기서 판단하기 위해 구문 설탕을 사용할 수 있습니다


function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
  var item = arr[i];
  (res.indexOf(item) === -1) && res.push(item);
 }
 return res;
}

하지만 하위 버전 브라우저에는 indexOf가 없습니다


var indexOf = [].indexOf ?
 function(arr, item) {
  return arr.indexOf(item)
 } :
 function indexOf(arr, item) {
  for (var i = 0; i < arr.length; i++) {
  if (arr[i] === item) {
   return i
  }
  }
  return -1
 }
function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (indexOf(ret, item) === -1) {
  ret.push(item)
 }
 }
 return ret
}

method3

더블 사용 다른 종류의 루프 비교 방법은 원본 배열의 요소와 결과 배열을 하나씩 비교하는 것입니다. 다음으로 원본 배열의 반복되는 요소 중 마지막 요소를 배열에 넣을 수 있습니다


function unique(arr) {
 var ret = [];
 var len = arr.length;
 var isRepeat;
 for(var i=0; i<len; i++) {
  isRepeat = false;
  for(var j=i+1; j<len; j++) {
   if(arr[i] === arr[j]){
    isRepeat = true;
    break;
   }
  }
  if(!isRepeat){
   ret.push(arr[i]);
  }
 }
 return ret;
}

거기 여기에도 최적화된 버전이 있습니다


function unique(a) {
 var res = [];
 for (var i = 0, len = a.length; i < len; i++) {
 for (var j = i + 1; j < len; j++) {
  // 这一步十分巧妙
  // 如果发现相同元素
  // 则 i 自增进入下一个循环比较
  if (a[i] === a[j])
  j = ++i; //j = i = i + 1;
 }
 res.push(a[i]);
 }
 return res;
}

method4

자바스크립트의 개체 개체를 해시 테이블로 사용


function dedup(arr) {
 var hashTable = {};
 return arr.filter(function(value,index,arr){
  var key = JSON.stringify(value);
  var match = Boolean(hashTable[key]);
  return (match ? false : hashTable[key] = true);
 });
}

Object의 키 값은 모두 String 형식이므로, 그래서 1과 "1"을 구별할 수 없게 되었습니다. 약간의 개선을 통해 유형도 키에 저장됩니다


function dedup(arr) {
 var ret = [];
 var hash = {};
 for(var i = 0; i < arr.length; i++) {
  var item = arr[i];
  var key = typeof(item) + item;
  if(hash[key] !== 1) {
   ret.push(item)
   hash[key] = 1;
  }
 }
 return ret;
}

요약

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

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