Maison > interface Web > js tutoriel > Comment supprimer efficacement les valeurs en double d'un tableau JavaScript ?

Comment supprimer efficacement les valeurs en double d'un tableau JavaScript ?

Mary-Kate Olsen
Libérer: 2024-12-20 13:00:26
original
743 Les gens l'ont consulté

How to Efficiently Remove Duplicate Values from a JavaScript Array?

Supprimer les valeurs en double du tableau JS

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.

Utilisation du constructeur Set et de la syntaxe spread

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)];
Copier après la connexion

"Intelligent" mais naïf way

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);
Copier après la connexion

Les tables de hachage à la rescousse

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);
  });
}
Copier après la connexion

Le meilleur de deux mondes

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);
  });
}
Copier après la connexion

Trier | uniq

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]);
}
Copier après la connexion

Unique par...

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);
  });
}
Copier après la connexion

Premier ou dernier ?

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()];
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal