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
Barbara Streisandoriginal
2025-01-01 04:16:111026parcourir

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

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

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

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

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!

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
Article précédent:Parlons des métaframeworksArticle suivant:Parlons des métaframeworks