web-dev-qa-db-fra.com

Comment parcourir les données que je reçois de snapshot.val () et les pousser vers un tableau basé sur des clés

Je veux parcourir les données que je reçois de snapshot.val() en fonction des clés utilisateur et les pousser dans un tableau. J'ai essayé de le faire avec l'aide de la boucle for..in comme celle-ci,

firebase.database().ref('\interests').child("I would like to dine with").on('value', (snapshot) => {
  var data = snapshot.val();
  if(snapshot.exists()){
    for(let key in data){
      console.log("data[key]",data[key]);
      this.intVal.Push(data[key]);
      console.log("intVal",this.intVal);
    }
  }
})

Mais je reçois quelque chose comme ça,

enter image description here

Si vous remarquez, mon premier tableau contient 1 objet sous une clé utilisateur et mon deuxième tableau contient 3 objets sous leurs clés utilisateur. Comment puis-je pousser chaque valeur unique dans un tableau séparé?

Toute aide serait très appréciée! Merci

13
Gowtham

Il existe une méthode DataSnapshot.forEach() précisément à cet effet:

firebase.database().ref('\interests').child("I would like to dine with").on('value', (snapshot) => {
  snapshot.forEach((child) => {
    console.log(child.key, child.val()); 
    this.intVal.Push(child.val());
    console.log("intVal",this.intVal);
  });
  }
})
11
Frank van Puffelen

Vous pouvez à nouveau parcourir les données pour chaque objet

for(let key in data){
     console.log("data[key]",data[key]);
     for(innerKey in data[key]){
       var obj = {};
       obj[innerKey]=data[key][innerKey];
       this.intVal.Push(obj);
     }
     console.log("intVal",this.intVal);
}
4
Shriyansh Gautam

Le simple fait d'utiliser une carte matricielle peut résoudre toutes les douleurs que je pense.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

1
kanpinar

Vous n'avez pas encore testé ce code, mais devrait répondre à vos besoins.

var interest = data.pop();//remove the interest
var uniq = data.reduce((unique, users) => {
    for (userId in users) {
        if (!userId in unique.IDs) {
            unique.IDs[userId] = users[userId];
            unique.usersList.Push(users[userId]);
        }
    }
    return unique;
}, {IDs:{},usersList :[]});

console.log('interest is', interest);
console.log('uniq user ids', Object.keys(uniq.IDs));
console.log('uniq user list', uniq.usersList);
1
Shyam Babu