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ésde 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!