Maison > interface Web > js tutoriel > Comment puis-je supprimer efficacement les valeurs en double des tableaux JavaScript ?

Comment puis-je supprimer efficacement les valeurs en double des tableaux JavaScript ?

DDD
Libérer: 2025-01-03 12:13:41
original
671 Les gens l'ont consulté

How Can I Efficiently Remove Duplicate Values from JavaScript Arrays?

Suppression des valeurs en double des tableaux en JavaScript

Avez-vous affaire à un tableau pouvant contenir des doublons et devez-vous créer un nouveau tableau avec seulement les valeurs uniques ? Voici un guide complet avec plusieurs approches pour résoudre ce problème courant.

TL;DR : Utilisation de la syntaxe ES6 Set and Spread

const uniq = [...new Set(array)];
Copier après la connexion

"Smart" mais approche naïve (temps quadratique)

const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
Copier après la connexion

Les tables de hachage à la rescousse (Temps linéaire)

const uniq = (a) => {
  const seen = {};
  return a.filter((item) => {
    return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  });
};
Copier après la connexion

Le meilleur des deux mondes (Temps linéaire)

const 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 et filtrer (Temps linéaire)

const uniq = (a) => {
  return a.sort().filter((item, pos, ary) => !pos || item !== ary[pos - 1]);
};
Copier après la connexion

Unique par clé (filtrage basé sur un Rappel)

const 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

Préserver la première ou la dernière occurrence (à l'aide d'un ensemble ou d'une carte)

const uniqByKeepFirst = (a, key) => {
  const seen = new Set();
  return a.filter((item) => {
    const k = key(item);
    return seen.has(k) ? false : seen.add(k);
  });
};

const uniqByKeepLast = (a, key) => {
  return [...new Map(a.map((x) => [key(x), x]))].values();
};
Copier après la connexion

Choisissez l'approche qui correspond à votre type de tableau et les exigences de performance.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal