所以我试图制作一个动态的按钮列表,这些按钮对应于用户可以选择添加到他/她的个人资料中的运动。所以我有一系列的运动,然后看看他们是否已经在用户的数据库中,如果是,我将其删除。但我的问题是,我最终得到了所有的运动,因为控制台打印所有这些都是未定义的。我很确定我的问题是数组中的每个运动都是一个字符串,通常当你从数据库中访问一部分对象时,你只需添加一个。和你想要的类别。该值通常不是字符串即(userData.Spikeball,而不是现在正在执行的userData。" Spikeball")。但是,我不知道如何在数组中存储值以使它们工作。我尝试删除引用(我知道这是愚蠢但你必须尝试一切),这肯定没有工作,因为他们是变量而不是初始化。对此的任何帮助将不胜感激。
function getNewSports(uid)
{
console.log("uid = " + uid);
var sports = ["Spikeball", "Soccer", "Basketball", "Indoor", "Tennis", "Golf", "Frisbee", "Handball"];
userRef = firebase.database().ref().child("Users").child(uid).child("Sports");
userRef.once('value').then(function(snapshot) {
var userData = snapshot.val();
for(var i = 0; i < sports.length; i++)
{
var sport = sports[i];
console.log("userData." + sport + " = " + userData.sport);
if(userData.sport != null)
{
console.log("removing " + sport + " because userData." + sport + " = " + userData.sport);
sports.splice(i, (i+1));
i--;
}
}
for(var i = 0; i < sports.length; i++)
{
var newItem = document.createElement("BUTTON");
var t = document.createTextNode(sports[i]);
newItem.appendChild(t);
newItem.id = sports[i];
//newItem.class = "btn btn-secondary sportItem";
newItem.setAttribute("class", "btn btn-secondary sportItem");
newItem.setAttribute("onclick", "addSport(this.id)");
document.getElementById("sports-pop-up").appendChild(newItem);
}
console.log(sports);
});
}
答案 0 :(得分:0)
至少可以说几个问题:
userRef.once('value').then(function(snapshot) {
const userData = snapshot.val();
console.log(userData); // -- check the list of sports returned from Firebase.
您可以在快照上使用forEach循环结果:
snapshot.forEach(snap => {
const obj = snap.val();
console.log(obj)
}
您使用相同的for循环两次,因此您可以将逻辑组合成一个:
for(var i = 0; i < sports.length; i++) {
... Your logic
}