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,
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
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);
});
}
})
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);
}
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
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);