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

Résumé des compétences deduplication_javascript du tableau javascript

WBOY
Libérer: 2016-05-16 15:11:57
original
1424 Les gens l'ont consulté

Avant-propos

Récemment, afin de changer de travail et de préparer un entretien, j'ai commencé à revoir et à revoir les connaissances liées à JavaScript. Hier après-midi, j'ai pensé aux méthodes associées de déduplication de tableau, j'ai donc simplement compilé quelques articles sur l'algorithme JavaScript pour. utilisation future.Cette série d'articles est incertaine.Nombre, durée indéterminée, j'écrirai partout où je pense, aucune garantie d'exactitude, aucune garantie de haute efficacité, parlez juste de compréhension personnelle, s'il y a des erreurs, veuillez me corriger.

À propos de la suppression des doublons

La déduplication de tableau est un point d'inspection d'algorithme courant, et la manière d'obtenir la déduplication n'est rien d'autre que l'unicité et la non-unicité. Pour faire simple, cela signifie sélectionner les éléments uniques ou supprimer ceux qui ne le sont pas. Tous les algorithmes suivants sont nommés aveuglément par moi, veuillez les ignorer.

Correspondance de boucles pour supprimer les doublons

Comme son nom l'indique, chaque élément du tableau est comparé au tableau stockant l'élément. Lorsqu'il rencontre des éléments non répétitifs, il est placé dans un nouveau tableau jusqu'à la fin de la boucle. Puisque la correspondance comporte également des boucles, elle est placée dans un nouveau tableau. peut également être appelé correspondance à double boucle. La suppression des doublons est le moyen le plus simple auquel tout le monde puisse penser.

Code d'implémentation :

var arr=[1,3,4,56,3,7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]==n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Copier après la connexion

Remarque : il y a un bug dans la méthode ci-dessus. Lorsqu'il y a des nombres et des chaînes numériques, les nombres et les chaînes numériques ne sont pas distingués. Étant donné que la double égalité "==" est utilisée dans la fonction de correspondance isMatch() et que le type d'élément n'est pas vérifié, un "===" congruent doit en fait être utilisé.
Le code modifié est le suivant :

var arr=[1,3,4,56,3,'1',7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]===n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Copier après la connexion

Avantages et inconvénients de l'algorithme :

Avantages :

Mise en œuvre simple et réflexion intuitive

Inconvénients :

Inefficacité

Déduplication JSON/déduplication d'objet/déduplication de dictionnaire

La déduplication JSON, en termes simples, consiste à utiliser le caractère unique de la clé de l'objet Object pour convertir les éléments du tableau en JSON ou la valeur clé de l'objet. La valeur JSON stocke l'index du tableau, puis effectue une boucle for in sur l'objet JSON et le stocke dans un nouveau tableau.

Array, JSON et {} sont tous des objets, cet algorithme peut donc être implémenté en utilisant n'importe lequel d'entre eux.

Code d'implémentation :

Mode tableau :

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=[];
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Copier après la connexion

Mode JSON :

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache={};
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Copier après la connexion

Mode objet :

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=new Object();
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Copier après la connexion

Avantages et inconvénients de l'algorithme :

Avantages :

Simple

Très efficace

Inconvénients :

1. Modification du type d'éléments du tableau ()
2. Il y a un bug (rien de plus que la distinction entre les nombres et les chaînes numériques)

Déduplication récursive de file d'attente

J'y ai longuement réfléchi hier soir et j'ai pensé à utiliser une file d'attente. Triez d'abord le tableau dans une file d'attente par ordre croissant ou décroissant, afin que les mêmes éléments soient dans une région, puis correspondent à partir de la fin de. la file d'attente vers l'avant. Si la correspondance réussit, supprimez la fin de la file d'attente, puis l'élément précédent correspond à l'élément précédent. Une fois la correspondance complète terminée, les éléments restants constituent la file d'attente dédupliquée.

var arr=[6, 4, 6, 9, '6', 13, 56, 9, ,'11',1, 8, '7', 17, 5, 45, 3, 7];

function unqiue(array){
  //排序数组,形成队列
  array.sort(function(m,n){return m-n;});
  ////排序后,队尾向前对比,如果相同,删除队尾,依次类推
  function loop(Index){
    if(Index>=1){
      if(array[Index]===array[Index-1]){
        arr.splice(Index,1);
      }
      loop(Index-1);
    }
    
  }
  loop(array.length-1);
  return array;
}

console.log(unqiue(arr));

Copier après la connexion

Avantages et inconvénients de l'algorithme :

Avantages :

Efficacité supérieure

Inconvénients :

Pas le plus efficace

Méthode de déduplication INDEXOF

Déterminez si le navigateur prend en charge indexOf. indexOf est une nouvelle méthode d'ecmaScript5. Elle n'est pas prise en charge par IE8 et versions antérieures (y compris IE8, IE8 ne prend en charge qu'une partie d'ecma5)

.
if (!Array.prototype.indexOf){ 
// 新增indexOf方法 
Array.prototype.indexOf = function(item){ 
var result = -1, a_item = null; 
if (this.length == 0){ 
return result; 
} 
for(var i = 0, len = this.length; i < len; i++){ 
a_item = this[i]; 
if (a_item === item){ 
result = i; 
break; 
} 
} 
return result; 
} 
} 
Copier après la connexion

É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