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. 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 est que {} et {} comptent comme les mêmes éléments, alors la solution sera différente). Cet article partage principalement avec vous plusieurs méthodes de déduplication des tableaux JavaScript.
méthode 1
Utiliser des doubles boucles
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 il n'y a pas d'indexOf dans les navigateurs de versions inférieures
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 }
method3
Une autre méthode de comparaison utilisant des doubles boucles, la précédente consiste à combiner les éléments du tableau d'origine et le tableau résultat En comparant un par un, ci-dessous 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; }
Il existe également 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; }
méthode4
Utilisez l'objet object en JavaScript comme table de hachage
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); }); }
Parce que les valeurs clésde Object sont toutes des types String, donc 1 et "1" ne peuvent pas être distingués. améliorez-le légèrement, stockez également 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; }
Recommandations associées :
Code de la méthode PHP pour implémenter la déduplication de tableau
JS est simple Analyse des méthodes pour réaliser la déduplication de tableau
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!