Maison > interface Web > js tutoriel > le corps du texte

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

黄舟
Libérer: 2017-09-22 10:04:55
original
1455 Les gens l'ont consulté

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;
}
Copier après la connexion

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
}
Copier après la connexion

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;
}
Copier après la connexion

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
}
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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);
 });
}
Copier après la connexion

É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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal