我是Firebase的初学者,请作出反应。我能够基于userEmail从Firebase获取所需的数据。但是我在访问数据时非常困惑。
firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', data => {
console.log('data: ', data);
})
我得到以下输出:
data: Object {
"-Lhdfgkjd6fn3AA-": Object {
"email": "t5@gmail.com",
"favQuote": "this is it",
"firstName": "t5",
"lastName": "l5",
},
}
请帮助我如何将所有值(“ -Lhdfgkjd6fn3AA-”,名字,姓氏,电子邮件和favQuote)访问变量,例如:data.firstName,data.lastName,data.key等。谢谢。
答案 0 :(得分:2)
let data = {
"-Lhdfgkjd6fn3AA-": {
"email": "t5@gmail.com",
"favQuote": "this is it",
"firstName": "t5",
"lastName": "l5",
},
};
console.log(Object.keys(data))//returning an array of keys, in this case ["-Lhdfgkjd6fn3AA-"]
console.log(Object.keys(data)[0])
console.log(Object.values(data))//returning an array of values of property
console.log(Object.values(data)[0].email)
请务必注意,上面的代码以硬编码“ 0”作为索引,因为它假定您的data
对象只有一个键。如果您有更多的键,那么也不能简单地替换索引,因为对象的属性没有可预测的顺序
答案 1 :(得分:1)
这实际上是一个JavaScript问题。我也必须弄清楚这一点。 ...可行。
var p;
var thisLine;
p = docu.data();
for (var k in p) {
if (p.hasOwnProperty(k)) {
if (isObject(p[k])) {
thisLine = p[k];
Object.keys(thisLine).forEach(function (key, index) {
console.log(key, index);
});
}
}
}
function isObject(obj) {
return obj === Object(obj);
}
答案 2 :(得分:0)
对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
因此,第一步是您需要遍历on()
回调中的快照。
第二步是您需要调用Snapshot.val()
来从快照中获取JSON数据。从那里可以获得单个属性。
firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', snapshot => {
snapshot.forEach(userSnapshot => {
let data = userSnapshot.val();
console.log('data: ', data);
console.log(data.email, data.firstname);
});
})