web-dev-qa-db-fra.com

Regroupement de JSON par valeurs

En utilisant l'API de publication d'emplois Lever, j'obtiens les résultats JSON triés par emplacement et j'essaie de comprendre comment regrouper tous ces résultats par "équipe" dans les résultats, comme les carrières Shopify page.

Voici le codepen et voici le JSON

J'ai essayé d'ajouter ce qui suit à la ligne 38 du codepen pour essayer de saisir les valeurs de l'équipe, mais cela ne sort pas comme prévu (je reçois une lettre par ligne, ce qui n'est pas utile):

for (var x in _data[i].postings[j].categories.team)

Je suis sûr que c'est probablement quelque chose de super simple, mais je ne suis certainement pas un gars javascript. Toute aide serait très appréciée!

9
robotsmeller

Supposons que la sortie JSON est

outJSON= 
 [ {
      team: "TeamA",
      name: "Ahmed",
      field3:"val3"
  }, 
{
      team: "TeamB",
      name: "Ahmed",
      field3:"val43"
  }, 
{
      team: "TeamA",
      name: "Ahmed",
      field3:"val55"
  }, 


]

Voir ensuite la fonction groupBy dans la DEMO ci-dessous:


DÉMO:

outJSON= [ {team: "TeamA",name: "Ahmed",field3:"val3"}, {team: "TeamB",name: "Ahmed",field3:"val43"}, {team: "TeamA",name: "Ahmed",field3:"val55"} ]

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).Push(x);
    return rv;
  }, {});
};
var groubedByTeam=groupBy(outJSON, 'team')
console.log(groubedByTeam);

Ensuite, si vous souhaitez parcourir les catégories (équipes), obtenez toutes les catégories dans le tableau:

Object.keys(groubedByTeam) // return ["TeamA","TeamB"]

puis :

  Object.keys(groubedByTeam).forEach(function(category){

       console.log(`Team ${category} has ${groubedByTeam[category].length} members : `);
        groubedByTeam[category].forEach(function(memb,i){
              console.log(`---->${i+1}. ${memb.name}.`)
       })
  }); 
23
Abdennour TOUMI