J'ai un tableau où les objets sont générés à partir d'un push qui se trouve à l'intérieur d'une fonction, lorsque j'essaie de visualiser les objets directement dans le tableau, je réussis, mais j'utilise forEach pour ajouter le nombre de fois qu'un identifiant utilise le service , mais le résultat retourne toujours vide.

client.onMessage(async message => {

   count_commands.push({id:parseInt(regNumberPhone), age: 1});

});


const count_commands = [],
  hash = Object.create(null),
  result = [];

  count_commands.forEach(function (o) {
    if (!hash[o.id]) {
        hash[o.id] = { id: o.id, age: 0 };
        result.push(hash[o.id]);
    }
    hash[o.id].age += +o.age;
  });

Pour regarder les objets dans count_commands

console.log(count_commands);
Return:
[ { id: 559892099500, age: 1 },
  { id: 559892099500, age: 1 },
  { id: 559892099500, age: 1 } ]

Mais pour voir la somme totale de chaque identifiant, le tableau retourne vide

console.log(result);
Return:

    {}

Je dois revenir comme :

[ { id: 559892099500, age: 3 } }
0
ctovelox 9 nov. 2020 à 21:38

1 réponse

Meilleure réponse

Votre code fonctionne comme prévu. c'est-à-dire que la boucle for renverra la structure dont vous avez besoin. Le problème que je vais deviner est que vous enregistrez un gestionnaire d'événements qui remplira le tableau count_commands uniquement après la réception de l'événement onMessage.

Si vous essayez d'itérer le tableau count_commands avant qu'il ne soit rempli, vous obtiendrez un résultat vide. Je soupçonne qu'il y a d'autres problèmes également si le console.log renvoie {} au lieu de [].

Vous devez modifier votre code en quelque chose de similaire à ce qui suit

const count_commands = [];
const result = [];
const hash = {};

client.onMessage(async message => {
   count_commands.push({id:parseInt(regNumberPhone), age: 1});
   updateResults();
});

function updateResults() {
  count_commands.forEach(function (o) {
    if (!hash[o.id]) {
        hash[o.id] = { id: o.id, age: 0 };
        result.push(hash[o.id]);
    }
    hash[o.id].age += +o.age;
  });
}
1
jeeves 9 nov. 2020 à 20:32