Maison > interface Web > js tutoriel > Comment dédupliquer efficacement des tableaux d'objets en fonction de propriétés spécifiques ?

Comment dédupliquer efficacement des tableaux d'objets en fonction de propriétés spécifiques ?

Barbara Streisand
Libérer: 2025-01-01 04:16:11
original
1031 Les gens l'ont consulté

How to Efficiently Deduplicate Arrays of Objects Based on Specific Properties?

Déduplication efficace des tableaux d'objets

La suppression des objets en double des tableaux peut être cruciale pour l'intégrité des données et l'optimisation des performances. Cet article explore des méthodes efficaces pour éliminer les doublons des tableaux contenant des objets.

Problème :

Considérons un objet avec un tableau d'objets imbriqués. L'objectif est de supprimer les objets en double en fonction de leurs propriétés « lieu » et « nom ».

obj = {};

obj.arr = new Array();

obj.arr.push({place: "here", name: "stuff"});
obj.arr.push({place: "there", name: "morestuff"});
obj.arr.push({place: "there", name: "morestuff"});
Copier après la connexion

Solution :

Méthode 1 : Filtrage ES6 avec Array.filter et Array.findIndex

obj.arr = obj.arr.filter((value, index, self) =>
  index === self.findIndex((t) =>
    t.place === value.place && t.name === value.name
  )
);
Copier après la connexion

Cette méthode exploite Array.filter et Array.findIndex pour parcourir le tableau et identifier les doublons. Il renvoie uniquement les objets uniques, en préservant les deux propriétés.

Méthode 2 : Solution générique avec JSON.stringify

const uniqueArray = obj.arr.filter((value, index) => {
  const _value = JSON.stringify(value);
  return index === obj.arr.findIndex((obj) => {
    return JSON.stringify(obj) === _value;
  });
});
Copier après la connexion

Cette approche compare la représentation JSON des objets à détecter les doublons. Il s'agit d'une solution générique qui peut accueillir des objets avec n'importe quelle structure de propriété.

Méthode 3 : Utilisation de la comparaison d'égalité de propriété personnalisée

const isPropValuesEqual = (subject, target, propNames) =>
  propNames.every((propName) => subject[propName] === target[propName]);

const getUniqueItemsByProperties = (items, propNames) =>
  items.filter((item, index, array) =>
    index === array.findIndex((foundItem) => isPropValuesEqual(foundItem, item, propNames))
  );
Copier après la connexion

Cette méthode permet une comparaison de propriété plus personnalisée. . Il utilise une fonction de rappel pour déterminer l'égalité des propriétés et renvoie un ensemble unique d'objets basés sur les propriétés spécifiées.

Explication :

La clé de la déduplication est de trouver les doublons et les excluant du résultat. La fonction findIndex permet d'identifier la première instance d'un objet avec des propriétés spécifiques, tandis que le filtre supprime les doublons qui se produisent par la suite.

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