Identification des doublons dans les tableaux JavaScript avec un prototype
En JavaScript, il est souvent nécessaire de supprimer les valeurs en double des tableaux. Une approche populaire consiste à étendre le prototype Array avec une fonction « getUnique » personnalisée, comme indiqué ci-dessous :
Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }
Cependant, ce script rencontre des problèmes lorsque le tableau contient une valeur nulle. Pour comprendre pourquoi, examinons le problème en détail.
La fonction « getUnique » utilise un objet « o » comme stockage temporaire des valeurs. Cela fonctionne bien pour les valeurs qui peuvent servir de clés d'objet, telles que des chaînes ou des nombres autres que zéro. Cependant, JavaScript traite le nombre zéro (« 0 ») comme une valeur fausse, ce qui signifie que « o[0] » est évalué à « faux ».
Lors d'une itération sur les clés d'objet, les valeurs fausses sont ignorées, ce qui entraîne l'omission de zéro dans le tableau unique résultant. Ce comportement diffère de l'opération prévue, qui consiste à traiter zéro comme une valeur unique valide.
Solution native avec filtre
Dans les environnements JavaScript modernes (ES5 et supérieur) , une approche plus concise et efficace est disponible en utilisant la méthode 'filter' :
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter(onlyUnique); console.log(unique); // ['a', 1, 2, '1']
La méthode 'filter' prend une fonction de rappel qui renvoie 'true' pour chaque élément unique à inclure dans le nouveau tableau. Dans ce cas, notre rappel vérifie si l'index de l'élément actuel dans le tableau correspond à sa position dans le rappel, confirmant ainsi son unicité. Cette approche ne repose pas sur des clés d'objet et gère correctement les valeurs nulles.
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!