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
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]
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
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
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
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]
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]
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!