Maison  >  Article  >  interface Web  >  Explication détaillée de quatre méthodes pour supprimer les doublons des tableaux JavaScript

Explication détaillée de quatre méthodes pour supprimer les doublons des tableaux JavaScript

黄舟
黄舟original
2017-09-22 10:04:551456parcourir

Déduplication de tableau, l'exigence générale est de vous donner un tableau, d'appeler la méthode de déduplication et de renvoyer une copie de la valeur. Il n'y aura aucun élément en double dans la copie. Ci-dessous, l'éditeur de Script House vous propose une variété de méthodes pour dédupliquer les tableaux js. Elles sont très bonnes. Les amis qui en ont besoin peuvent se référer à

Array Deduplication. la méthode de déduplication renvoie une copie de la valeur, sans éléments en double dans la copie. De manière générale, deux éléments qui renvoient vrai via la comparaison === sont considérés comme le même élément et doivent être dédupliqués. Par conséquent, 1 et "1" sont des éléments différents, et 1 et new Number(1) sont des éléments différents, {. } et {} sont des éléments différents (références différentes). (Bien sûr, si l'exigence considère que {} et {} sont comptés comme les mêmes éléments, alors la solution sera différente)

méthode 1

Utiliser la double boucle


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;
}

méthode 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
}

Vous pouvez utiliser un sucre de syntaxe


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;
}

mais dans les navigateurs de version inférieure, il n'y a pas d'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
}

méthode3

Autre méthode de comparaison utilisant des doubles boucles, la précédente consiste à combiner les éléments du tableau d'origine et le résultat Comparez les tableaux un par un. Ensuite, nous pouvons mettre le dernier élément des éléments répétés du tableau d'origine dans le tableau


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;
}

Ici. est une version optimisée


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

Utiliser l'objet objet en javascript comme hachage table


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);
 });
}

Étant donné que les valeurs clés​​de Object sont toutes des types String, 1 et "1" ne peuvent pas être distingués. Nous pouvons apporter une légère amélioration et. stocker le type dans la clé


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;
}

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn