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

Introduction aux exemples d'implémentation JS de la déduplication de tableau

零下一度
Libérer: 2017-07-16 14:52:48
original
1377 Les gens l'ont consulté

Une question à laquelle les enquêteurs front-end doivent se préparer : Comment supprimer les doublons du tableau de Javascript. Pour autant que je sache, Baidu, Tencent, Shanda, etc. ont tous posé cette question lors d'entretiens. Cette question semble simple, mais elle recèle en réalité des dangers cachés. Le test ne porte pas seulement sur la réalisation de cette fonction, mais également sur votre compréhension approfondie de l'exécution d'un programme informatique.

Méthode 1 :

Utiliser l'épissure pour opérer directement sur le réseau

double- boucle de couche, élément de boucle externe, lors de la comparaison de la valeur

dans la boucle interne, si la valeur est la même, supprimez cette valeur

Remarque : Après avoir supprimé l'élément , vous devez changer la longueur du tableau Également moins 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
Copier après la connexion

Avantages : simple et facile à comprendre

Inconvénients : utilisation élevée de la mémoire, vitesse lente

Méthode 2 :

Boucle double couche, éléments de boucle externe, comparer les valeurs lors de la boucle interne

S'il y a les mêmes valeurs, ignorez-les, sinon, poussez-les dans le tableau

Array.prototype.distinct = function(){
  var arr = 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]);
  }
  return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();       //返回[3,4,2,1]
Copier après la connexion

Méthode 3 : utilisez les attributs de l'objet pour supprimer les doublons s'ils ne peuvent pas avoir les mêmes caractéristiques

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

Méthode 4 : TableauRécursionSupprimer la duplication

Utiliser l'idée récursive

Triez d'abord, puis comparez à partir de la fin. S'ils rencontrent la même chose, supprimez


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

Méthode 5 : Utilisez indexOf et 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
Copier après la connexion

Méthode 6 : utiliser l'ensemble d'ES6

Définir la structure des données, qui est similaire à un tableau et les valeurs de ses membres sont toutes uniques.

Utilisez Array.from pour convertir la structure Set en un tableau


function dedupe(array){
  return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]
Copier après la connexion

L'opérateur étendu (...) est utilisé en interne pour...de boucle

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];  
console.log(resultarr); //[1,2,3]
Copier après la connexion

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