我希望根据用户密钥遍历从snapshot.val()
收到的数据并将它们推送到数组中。我尝试在for..in循环的帮助下这样做,
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);
}
}
})
但我得到的是这样的东西,
如果您注意到,我的第一个数组在用户键下包含1个对象,而我的第二个数组在其用户键下包含3个对象。如何在单独的数组中推送每个值?
任何帮助将不胜感激!感谢
答案 0 :(得分:8)
正是为了这个目的,有一个DataSnapshot.forEach()
method:
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);
});
}
})
答案 1 :(得分:4)
您可以为每个对象再次迭代数据
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);
}
答案 2 :(得分:1)
尚未测试此代码,但应符合您的需要。
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);
答案 3 :(得分:1)