Maison  >  Article  >  interface Web  >  Plusieurs idées et résumé du code d'implémentation de l'utilisation de javascript pour dédupliquer les tableaux

Plusieurs idées et résumé du code d'implémentation de l'utilisation de javascript pour dédupliquer les tableaux

伊谢尔伦
伊谢尔伦original
2017-07-22 14:30:461018parcourir

1. Méthode de parcours de tableau

La méthode la plus simple pour supprimer les doublons, idée d'implémentation : créer un nouveau tableau, parcourir le tableau entrant et ajouter la valeur au nouveau tableau s'il n'est pas dans le nouveau tableau ; Remarque : La méthode "indexOf" pour déterminer si la valeur est dans le tableau est une méthode ECMAScript5, qui n'est pas prise en charge sous IE8. Vous devez écrire plus de code compatible avec les versions inférieures des navigateurs. le code source est le suivant :


// 最简单数组去重法 
function unique1(array){ 
var n = []; //一个新的临时数组 
//遍历当前数组 
for(var i = 0; i < array.length; i++){ 
//如果当前数组的第i已经保存进了临时数组,那么跳过, 
//否则把当前项push到临时数组里面 
if (n.indexOf(array[i]) == -1) n.push(array[i]); 
} 
return n; 
}

2. Méthode de paire clé-valeur d'objet
Cette méthode s'exécute plus rapidement que toute autre méthode, mais elle prend Plus de mémoire. Idée d'implémentation : créez un nouvel objet js et un nouveau tableau, et parcourez le passé. Lors de la saisie du tableau, déterminez si la valeur est la clé de l'objet js. Sinon, ajoutez la clé à l'objet et mettez-la. dans le nouveau tableau. Remarque : lors de la détermination s'il s'agit d'une clé d'objet js, "toString()" sera automatiquement exécuté sur la clé entrante. Différentes clés peuvent être confondues avec la même ; par exemple : a[1], a["1"]. Pour résoudre le problème ci-dessus, vous devez toujours appeler "indexOf".


// 速度最快, 占空间最多(空间换时间) 
function unique2(array){ 
var n = {}, r = [], len = array.length, val, type; 
for (var i = 0; i < array.length; i++) { 
val = array[i]; 
type = typeof val; 
if (!n[val]) { 
n[val] = [type]; 
r.push(val); 
} else if (n[val].indexOf(type) < 0) { 
n[val].push(type); 
r.push(val); 
} 
} 
return r; 
}

3. Méthode de jugement d'indice de tableau
Vous devez toujours appeler "indexOf". Les performances sont similaires à la méthode 1. Idée d'implémentation : Si le tableau actuel Si la première occurrence du i-ème élément dans le tableau actuel n'est pas i, cela signifie que le i-ème élément est répété et sera ignoré. Sinon, stockez le tableau de résultats.


function unique3(array){ 
var n = [array[0]]; //结果数组 
//从第二项开始遍历 
for(var i = 1; i < array.length; i++) { 
//如果当前数组的第i项在当前数组中第一次出现的位置不是i, 
//那么表示第i项是重复的,忽略掉。否则存入结果数组 
if (array.indexOf(array[i]) == i) n.push(array[i]); 
} 
return n; 
}

4. Méthode de suppression adjacente après tri
Bien que le résultat du tri de la méthode "tri" du tableau natif ne soit pas très fiable, il peut Cette lacune n'a aucun effet sur la déduplication orientée commande. Idée d'implémentation : triez le tableau entrant de manière à ce que les mêmes valeurs soient adjacentes après le tri, puis lors du parcours, ajoutez uniquement les valeurs qui ne sont pas des doublons de la valeur précédente au nouveau tableau.


// 将相同的值相邻,然后遍历去除重复值 
function unique4(array){ 
array.sort(); 
var re=[array[0]]; 
for(var i = 1; i < array.length; i++){ 
if( array[i] !== re[re.length-1]){ 
  re.push(array[i]); 
 } 
 } 
 return re; 
}

5. Optimiser la méthode de traversée de tableau
Le code d'implémentation de cette méthode est plutôt cool L'idée d'implémentation : obtenir la valeur la plus à droite sans. duplication dans un nouveau tableau. (Lorsque des valeurs en double sont détectées, terminez la boucle en cours et entrez le prochain tour de jugement dans la boucle de niveau supérieur) Recommandé


// 思路:获取没重复的最右一值放入新数组 
function unique5(array){ 
var r = []; 
for(var i = 0, l = array.length; i < l; i++) { 
 for(var j = i + 1; j < l; j++) 
  if (array[i] === array[j]) j = ++i; 
 r.push(array[i]); 
 } 
 return r; 
}

à déterminer si le navigateur prend en charge indexOf, indexOf La nouvelle méthode d'ecmaScript5 n'est pas prise en charge par IE8 ou version antérieure (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; 
} 
}


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!

Déclaration:
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