Firebase遍历数据时无法获取Object ID,该如何解决?
解决Firebase Realtime Database获取节点ID的问题
嘿,我懂你现在的困扰——你已经能顺利遍历数据拿到about_me的值,但就是拿不到Firebase生成的节点ID(比如49GRZb8B31MUfpBN3zvHKOHCMOa2)对吧?问题其实出在你调用key的方式上!
错误原因
你尝试用snap.val().key来获取ID,但这里的逻辑搞反了:
snap是DataSnapshot对象,它本身自带key属性,这个属性就是你要的节点ID;- 而
snap.val()返回的是你存在数据库里的实际数据对象,这个对象里并没有key字段(除非你自己手动存进去了),所以自然会返回undefined。
正确的写法
把你的代码改成这样就能拿到节点ID了:
database.once("value", function(snapshot){ snapshot.forEach(snap => { console.log("节点ID:", snap.key); // 直接访问snap对象的key属性 console.log("about_me的值:", snap.val().about_me); }) });
额外说明
如果你想获取父节点的ID(也就是snapshot对应的节点ID),直接用snapshot.key就可以;而forEach遍历出来的每个snap,它们的key就是各自子节点的唯一ID,这正是你要的49GRZb8B31MUfpBN3zvHKOHCMOa2这类值。
另外你之前试的snap.val()[0]返回整个对象,是因为snap.val()本身是键值对结构的对象,不是数组,用下标访问对它不适用哦。
内容的提问来源于stack exchange,提问作者Gurmukh Singh
相关产品推荐
相关产品推荐

