0
votes

Comment grouper des objets d'objets pour séparer des tableaux par valeur d'objet?

Exemple: xxx

J'ai besoin de regrouper ce tableau par nom pour obtenir des tableaux séparés comme: xxx

Je n'ai aucune idée de perfomis cela. Merci!


4 commentaires

C'est un regroupement, pas trier


Ce n'est pas le tri. C'est filtrer. Le tri signifie tout le contenu de 1 seau. Vous voulez filtrer le contenu de 1 seau dans d'autres. Vous auriez besoin de développer un ensemble de valeurs qui corrélent au nombre de seaux. Le filtre serait exécuté un tas de fois, mais vous pouvez créer une solution plus optimale, puis appelant cette commande n Time


@HindMer, sorte de ...


Plus important encore, où est votre tentative. Qu'essayez-vous?


3 Réponses :


3
votes

Vous voulez regrouper les articles par nom, je pense et ne pas les trier. P>

Si c'est ce que vous voulez, vous pouvez créer un dictionnaire intermédiaire avec array.reduce () code> , dont les clés sont les noms et les valeurs sont des matrices regroupant tous les objets avec le même nom. P>

Alors Utilisez Object.Values ​​() pour énumérer ce dictionnaire et renvoyer tous les groupes: p>

p>

const arr = [{name:'Anna', hello: 1}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}];

const result = Object.values(arr.reduce((acc, x) => {
  acc[x.name] = [...(acc[x.name] || []), x ];
  return acc;
}, {}));

console.log(result)

1 commentaires

Merci beaucoup. J'ai commencé à me faire, mais la fonction était beaucoup plus grosse que la vôtre. Beaucoup appris de votre exemple, merci



1
votes

Groupe Votre tableau par Nom code> Tout d'abord, puis obtenez les valeurs d'objet. Vous pouvez utiliser Array.Rece et Object.values ​​ Code> à cet effet

p>

var array  = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}];

const res = array.reduce((acc, item) => {
   if (acc[item.name]) {
      acc[item.name] = [...acc[item.name], item];
   } else {
      acc[item.name] = [item];
   }
   return acc;
}, {});

console.log(Object.values(res));


0 commentaires

0
votes

Il suffit de convertir en objet en fonction de la valeur à l'aide de:

const test = array.reduce((acc, el) => {
  if (!acc[el.name]) {
    return {
       ...acc,
       [el.name]: [el]
    }
  }
  return {
    ...acc,
    [el.name]: [...acc[el.name], el]
  }
}, {});


0 commentaires