-5
votes

Consolider la matrice basée sur une valeur de propriété commune

J'écris une petite application d'une petite application propulsée par Vuejs et Expressengine qui affiche un classement de tournois de golf. Un tournoi peut exiger que vous jouiez plus d'un cours. Les données sortant de la base de données sont indiquées ci-dessous (tours).

Le problème est que j'ai besoin de restructurer le tableau des tours afin qu'il ressemble à la matrice de classement. Je passe un peu d'écrivains sur la façon d'accomplir cela. Toute directive serait extrêmement appréciée! xxx xxx


1 commentaires

Hey @Luke, il est fortement recommandé d'afficher un code tentatif à ce que vous voulez aborder. Stackoverflow n'est pas un site de demande et de réception, nous aidons avec le code écrit. Veuillez réviser votre question ci-dessus pour être moins vague.


5 Réponses :


0
votes

Une approche pour cela utilise Réduire () . Sur chaque itération, vous pouvez vérifier si l'objet analysé actuel existe déjà sur la matrice accumulée (c'est un objet avec le même nom d'équipe code> existant déjà). Ensuite, vous pouvez utiliser cette condition pour appuyer sur un nouvel objet entier dans la matrice accumulée ou simplement ajouter un nouvel ensemble de données au tableau code> TRAY code>:

p>

const rounds = [
   {team: "Dropkick Murphies", score: 75, course: 17},
   {team: "Dropkick Murphies", score: 62, course: 24},
   {team: "Dropkick Murphies", score: 69, course: 26},
   {team: "Gigantic", score: 67, course: 26},
   {team: "Gigantic", score: 65, course: 17},
   {team: "Gigantic", score: 63, course: 24}
];

let res = rounds.reduce((r, {team, score, course}) =>
{
   let found = r.findIndex(x => x.team === team);
   
   if (found >= 0)
       r[found].rounds.push({score: score, course: course});
   else
       r.push({team: team, rounds: [{score: score, course: course}]});

   return r;

}, []);

console.log(res);


0 commentaires

0
votes

Vous pouvez implémenter une fonction d'assistance pour la conversion. XXX PRE>

Testez-le: P>

convertRoundsToLeaderBoard(
[
   {
      team: "Dropkick Murphies",
      score: 75,
      course: 17
   },
   {
      team: "Dropkick Murphies",
      score: 62,
      course: 24
   },
   {
      team: "Dropkick Murphies",
      score: 69,
      course: 26
   },
   {
      team: "Gigantic",
      score: 67,
      course: 26
   },
   {
      team: "Gigantic",
      score: 65,
      course: 17
   },
   {
      team: "Gigantic",
      score: 63,
      course: 24
   }
]);


0 commentaires

0
votes

Je suggérerais de toucher vos données par équipe à l'aide d'une carte code>. De cette façon, vous pouvez construire vos données avec une boucle foreach code> avec une complexité de temps linéaire:

p>

const rounds = [{team: "Dropkick Murphies",score: 75,course: 17},{team: "Dropkick Murphies",score: 62,course: 24},{team: "Dropkick Murphies",score: 69,course: 26},{team: "Gigantic",score: 67,course: 26},{team: "Gigantic",score: 65,course: 17},{team: "Gigantic",score: 63,course: 24}];

// Create Map with one entry per team
const map = new Map(rounds.map(({team}) => [team, []]));
// Populate each team with their scores
rounds.forEach(({team,score,course}) => map.get(team).push({score,course}));
// Convert the Map to the desired data structure
const result = Array.from(map, ([team, rounds]) => ({team, rounds}));

console.log(result);


0 commentaires

0
votes

Probablement pas la solution la plus élégante, mais voici une autre: xxx


0 commentaires

0
votes

Vous pouvez le faire en utilisant Réduire.

Ici, nous utilisons ici STRY> Nom de l'équipe CODE> STROND> En tant que propriété clés et vérifiant si elle est déjà dans l'objet de sortie, nous appuisons le score code> code> et cours code> strong> dans la propriété autour de cette clé d'équipe particulière si non plus que nous créons une nouvelle clé. P>

P>

const rounds = [
   {team: "Dropkick Murphies", score: 75, course: 17},
   {team: "Dropkick Murphies", score: 62, course: 24},
   {team: "Dropkick Murphies", score: 69, course: 26},
   {team: "Gigantic", score: 67, course: 26},
   {team: "Gigantic", score: 65, course: 17},
   {team: "Gigantic", score: 63, course: 24}
];

let op = rounds.reduce((output,current)=>{
  if(output[current.team]){
    output[current.team].rounds.push({
      score : current.score,
      course: current.score
    })} else {
      output[current.team] = {
        team: current.team,
        rounds: [{score:current.score, course:current.course}]
      }
    }
 return output 
},{})

console.log(Object.values(op))


0 commentaires