Maison >interface Web >js tutoriel >Comment supprimer efficacement les valeurs en double d'un tableau JavaScript ?
La suppression des valeurs en double d'un tableau JavaScript peut être une tâche courante, en particulier lorsque vous travaillez avec des données pouvant contenir des entrées redondantes. Il existe plusieurs approches pour y parvenir efficacement, en fonction de la nature de vos données et des considérations de performances.
Cette méthode exploite le constructeur Set intégré et la propagation syntaxe pour créer un nouveau tableau qui ne contient que des valeurs uniques du tableau d'origine :
const uniq = [...new Set(array)];
Cette approche utilise la méthode filter() pour parcourir le tableau et vérifier si la première occurrence de chaque élément correspond à sa position actuelle dans le tableau. Les éléments dont les positions ne correspondent pas sont considérés comme des doublons :
const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
Les tables de hachage offrent un moyen efficace de détecter les éléments en double en utilisant des paires clé-valeur. Dans cette approche, chaque élément est ajouté à une table de hachage, et la présence d'un élément est vérifiée instantanément :
function uniq(a) { const seen = {}; return a.filter((item) => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); }
Pour combiner les avantages des deux précédents approches, cette solution utilise des tables de hachage pour les valeurs primitives et la recherche linéaire d'objets :
function uniq(a) { const prims = { boolean: {}, number: {}, string: {} }, objs = []; return a.filter((item) => { const type = typeof item; if (type in prims) return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); else return objs.indexOf(item) >= 0 ? false : objs.push(item); }); }
Trier le tableau avant de supprimer les doublons peut simplifier le processus :
function uniq(a) { return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]); }
Lorsque vous devez supprimer les doublons en fonction d'un critère spécifique, comme une propriété d'un objet, vous pouvez fournir une fonction de rappel à la méthode uniqBy() :
function uniqBy(a, key) { const seen = {}; return a.filter((item) => { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); }
Si vous souhaitez conserver uniquement la première ou la dernière occurrence des objets en double, vous pouvez utiliser les structures de données Set ou Map :
function uniqByKeepFirst(a, key) { const seen = new Set(); return a.filter((item) => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); } function uniqByKeepLast(a, key) { return [...new Map(a.map((x) => [key(x), x])).values()]; }
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!