"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > #ApprisAujourd'hui : Object.groupBy()

#ApprisAujourd'hui : Object.groupBy()

Publié le 2024-11-01
Parcourir:371

#LearnedToday: Object.groupBy()

 ? C'est enfin sorti ! Plus besoin d'écrire du code laid pour regrouper un tableau d'objets en fonction d'une valeur spécifique d'un champ !

Depuis fin 2023, il existe une méthode statique officielle pour Object appelée groupBy() qui le fait pour nous !
Il accepte un Iterable, tel qu'un Array, et une fonction, qui est exécutée pour chaque élément et doit renvoyer la "catégorie" de cet élément spécifique.
La méthode renvoie un nouvel objet où chaque clé est une catégorie différente contenant un tableau d'objets appartenant à cette catégorie spécifique.

REMARQUE : les éléments de l'objet renvoyé et de l'itérable d'origine sont les mêmes (pas de copies complètes !). La modification de la structure interne des éléments sera reflétée à la fois dans l'itérable d'origine et dans l'objet renvoyé.

Exemple

Donnons un exemple pratique pour voir à quel point il est facile de regrouper tous les personnages des Tortues Ninja par âge.

Le tableau initial

const ninjaTurtlesCharacters = [
  { age: 16, name: 'Michelangelo' },
  { age: 16, name: 'Raffaello' },
  { age: 16, name: 'Donatello' },
  { age: 16, name: 'Leonardo' },
  { age: 91, name: 'Splinter' },
  { age: 25, name: 'Casey Jones' },
  { age: 25, name: 'April O\'Neil' }
];

La bonne vieille méthode (avec réduction)

const ninjaTurtlesCharactersByAge = ninjaTurtlesCharacters.reduce(
  (groupedPeople, item) => ({
    ...groupedPeople,
    [item.age]: groupedPeople[item.age]
      ? [...groupedPeople[item.age], item]
      : [item],
  }),
  {}
);

La manière MODERNE

const ninjaTurtlesCharactersByAgeNew = Object.groupBy(
  ninjaTurtlesCharacters,
  ({ age }) => age
);

Astuce : utilisez Map.groupBy() si vous souhaitez renvoyer une carte au lieu d'un objet

Le résultat

{
  "16": [
    { age: 16, name: 'Michelangelo' },
    { age: 16, name: 'Raffaello' },
    { age: 16, name: 'Donatello' },
    { age: 16, name: 'Leonardo' }
  ],
  "25": [
    { age: 25, name: 'Casey Jones' },
    { age: 25, name: 'April O\'Neil' }
  ],
  "91": [
    { age: 91, name: 'Splinter' }
  ]
}

Démo

??‍? Comme d'habitude, j'ai créé un projet Stackblitz simple pour jouer avec le code.

 ? Documents : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy

ℹ Prise en charge du navigateur : https://caniuse.com/mdn-javascript_builtins_object_groupby

Déclaration de sortie Cet article est reproduit à: https://dev.to/danielzotti/learnedtoday-objectgroupby-4kl9?1 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3