AngularFire Firebase获取对象键:无法遍历对象时提取关联目标键
嘿,我来帮你搞定这个问题!其实对象是完全可以遍历的,咱们一步步来解决:
先明确你的数据结构
首先,我把你描述的结构用代码清晰展示出来,方便后续操作:
// 假设你的数据结构大概是这样 const gameData = { multiplayer: { "0YYbHk6Y1QORGEvOjvKW7DZATJs2": { opponentId: "", score: 3 }, "ErgRlNCMtrVdlZW8hwdz44HiuHl1": { opponentId: "", score: 0 }, "WlWCnCLca4TjpoBGodxXH3dkHxi1": { opponentId: "ErgRlNCMtrVdlZW8hwdz44HiuHl1", score: 0 } } };
方法1:用Object.entries()快速筛选
这是最简洁的方式,通过Object.entries()把对象转换成键值对数组,再用find()方法匹配条件:
const multiplayerObj = gameData.multiplayer; // 找到opponentId等于目标值的对象键 const targetKey = Object.entries(multiplayerObj).find(([key, item]) => { return item.opponentId === "ErgRlNCMtrVdlZW8hwdz44HiuHl1"; })?.[0]; console.log(targetKey); // 输出: WlWCnCLca4TjpoBGodxXH3dkHxi1
这里的?.是可选链操作符,能防止找不到匹配项时出现报错,如果你不需要兼容旧环境,这个写法非常高效。
方法2:用Object.keys()结合循环
如果你习惯更直观的循环写法,也可以这样做:
const multiplayerObj = gameData.multiplayer; let targetKey = null; // 遍历所有对象键 for (const key of Object.keys(multiplayerObj)) { if (multiplayerObj[key].opponentId === "ErgRlNCMtrVdlZW8hwdz44HiuHl1") { targetKey = key; break; // 找到目标后立刻退出循环,提升效率 } } console.log(targetKey); // 同样输出目标键
补充说明
你之前觉得对象无法遍历,可能是没用到正确的方法。JavaScript里有很多遍历对象的方式,比如Object.keys()(取键)、Object.values()(取值)、Object.entries()(取键值对),都能帮你轻松处理这类需求。
内容的提问来源于stack exchange,提问作者shashank
相关产品推荐
相关产品推荐

