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
Mary-Kate Olsenoriginal
2024-12-20 13:00:26697parcourir

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)];

"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);

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);
  });
}

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);
  });
}

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]);
}

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);
  });
}

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()];
}

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