如何使用for循环在Firebase数据库中获取指定的多个键?
解决Firebase数据库获取指定父级键的问题
我猜你现在是想拿到users节点下那些被圈出来的父级键(比如每个用户的唯一ID这类),但你的代码现在只输出了每个子节点内部的属性键对吧?其实问题很简单——你已经在循环里拿到目标键了,只是没正确输出它!
问题分析
你的原代码里,for(var groupID in groupData)这一行的groupID,就是你要找的那个被圈出的键!而你后面用Object.keys(groupData[groupID])拿到的是每个子节点里的属性(比如用户名、邮箱这类字段的键),这就偏离了你的需求。
修改后的代码方案
方案1:基于原代码调整
直接把输出改成groupID就行,如果你还需要保留子节点属性的输出也可以留着:
const sampletry = firebase.database().ref("users"); sampletry.on("value", function(snap) { const groupData = snap.val(); for(const groupID in groupData) { // 这就是你要的被圈出的键! console.log("目标键:", groupID); // 如果不需要子节点属性,下面两行可以删掉 const childPropertyKeys = Object.keys(groupData[groupID]); console.log("子节点属性键:", childPropertyKeys); } });
方案2:用Firebase快照的forEach方法(更推荐)
Firebase的快照对象自带forEach方法,遍历起来更贴合数据库的使用逻辑,还能方便处理排序、优先级等场景:
const sampletry = firebase.database().ref("users"); sampletry.on("value", function(snap) { snap.forEach(function(childSnap) { // childSnap.key 就是目标父级键 const targetKey = childSnap.key; console.log("目标键:", targetKey); // 如需获取子节点数据,用childSnap.val() const childData = childSnap.val(); console.log("子节点数据:", childData); }); });
补充说明
如果你的数据结构有更深的嵌套(比如users -> groupID -> 子节点 -> 更深层级的键),只需要在对应层级加循环或者用childSnap.child("子节点路径").key来获取特定层级的键就行。
内容的提问来源于stack exchange,提问作者kenny
相关产品推荐
相关产品推荐

