0
votes

Quelle est la meilleure façon de boucler à travers cet objet?

Je suis coincé à boucler à travers un objet appelé lecteurs contenant des données de lecteur. Je veux vérifier quel joueur possède la valeur la plus élevée x et enregistrez-la dans leader la variable qui changera lorsqu'un autre joueur dispose d'une valeur supérieure x .

L'objet ressemble à ceci: xxx

Voici comment je veux que ma sortie ressemble à xxx


2 commentaires

Quoi spécifiquement avez-vous des problèmes? Il n'y a pas beaucoup de façons de itérer sur un objet et aucun d'entre eux ne dépend de la structure réelle des objets. Est-ce que cela aide: Comment itérer sur un objet JavaScript?


Ou vous pouvez simplement itérer objet.keys (YourObject)


3 Réponses :


1
votes

Veuillez utiliser objet.Keys

p>

var players = {
    '86wjIB7Xbz1tmwlTAAAB': {
      rotation: 0.09999999999999964,    
      x: 579,
      y: 579,
      playerId: '86wjIB7Xbz1tmwlTAAAB'  
    },
    dWwtnOI8PryXJNDWAAAC: {
      rotation: 0.09999999999999964,    
      x: 488,
      y: 579,
      playerId: 'dWwtnOI8PryXJNDWAAAC'  
    },
    'GZPYpWdrzj9x0-SsAAAD': {
      rotation: -0.09999999999999964,   
      x: 694,
      y: 579,
      playerId: 'GZPYpWdrzj9x0-SsAAAD'  
    }
  }

  const leader = Object.keys(players).reduce((acc, cur) => {
    const obj = players[cur];
    return acc.x < obj.x ? { x:obj.x, leader: obj.playerId } : acc;
  }, { x: 0, leader: "" });

  console.log(leader);


0 commentaires

1
votes

Il peut être fait en dessous du code suivant:

p>

let data= {
      '86wjIB7Xbz1tmwlTAAAB': {
        rotation: 0.09999999999999964,    
         x: 579,
         y: 579,
         playerId: '86wjIB7Xbz1tmwlTAAAB'  
      },
      'dWwtnOI8PryXJNDWAAAC': {
         rotation: 0.09999999999999964,    
         x: 488,
         y: 579,
         playerId: 'dWwtnOI8PryXJNDWAAAC'  
       },
      'GZPYpWdrzj9x0-SsAAAD': {
         rotation: -0.09999999999999964,   
         x: 694,
         y: 579,
         playerId: 'GZPYpWdrzj9x0-SsAAAD'  
     }
    }

    let max = 0;
    let keyParent;
    let keys = Object.keys(data)

    for (var i = 0; i < keys.length; i++){
        if (data[keys[i]].x > max) {
           max = data[keys[i]].x
           keyParent = keys[i]
        }
    }

    console.log(keyParent)


0 commentaires

1
votes

Il y a quelques façons de le faire. Jay a déjà une bonne réponse, mais voici un autre, avec quelques points de plus:

Nous commençons avec vos données: p> xxx pré>

maintenant, notre premier objectif est de tourner Cet objet dans une collection d'objets - une matrice que nous pouvons opérer sur. p>

Le moyen le plus simple est de saisir les "touches" (noms de propriété) pour l'objet: p>

const playersObj = {
  '86wjIB7Xbz1tmwlTAAAB': {
    rotation: 0.09999999999999964,
    x: 579,
    y: 579,
    playerId: '86wjIB7Xbz1tmwlTAAAB',
  },
  'dWwtnOI8PryXJNDWAAAC': {
    rotation: 0.09999999999999964,
    x: 488,
    y: 579,
    playerId: 'dWwtnOI8PryXJNDWAAAC',
  },
  'GZPYpWdrzj9x0-SsAAAD': {
    rotation: -0.09999999999999964,
    x: 694,
    y: 579,
    playerId: 'GZPYpWdrzj9x0-SsAAAD',
  },
};

// turn players into a collection
const players = Object.values(playersObj);

const leaderId = players.sort((a, b) => b.x - a.x)[0].playerId;

console.log(`Leader: ${leaderId}`);


2 commentaires

C'est une excellente solution! Vous pouvez également utiliser objet.values ​​ pour obtenir les valeurs de propriété comme une matrice.


Oui, j'ai manqué de remarquer que les clés et les playerids sont les mêmes.