我设置了一个firebase。这是结构:
我无法获得'newNroomID'值(即a6QVH,a7LTN等...)。 此值将用于与其他变量值进行比较。
我知道在javascript中,要访问对象的值,可以这样做:
var card = { king : 'spade', jack: 'diamond', queen: 'heart' }
card.jack = 'diamond'
但是当火灾基地出现时似乎有不同的故事,或者我确实错过了一些东西。这是我的代码。
var pokerRoomsJoin = firebase.database().ref(); // this is how i set it up this block of code is for reading the data only
pokerRoomsJoin.on('value', function(data){
var rID = data.val();
var keys = Object.keys(rID);
var callSet = false;
for (var i = 0 ; i < keys.length; i++) {
var indexOfKeys = keys[i];
var roomMatching = rID[indexOfKeys];
var matchID = roomMatching.newNroomID; // this does not work alwaus give me undefined
console.log('this return :' + matchID + ' WHY!')
console.log(roomMatching)
if(matchID == 'ffe12'){ // 'ffe12' is actually a dynamic value from a paramiter
callSet = true;
}
}
})
,这是控制台日志的结果:
奇怪的是我能够像这样访问它var matchID = roomMatching.newNroomID // it return a6QVH and a7LTN one at a time inside the loop
仅当我将ref设置为:
var pokerRoomsJoin = firebase.database().ref('room-' + roomId);
我尝试过搜索,但似乎与我的结构不同。我的数据结构不好吗?让我摆脱这种痛苦,提前谢谢!
答案 0 :(得分:0)
让我们逐行看到循环中的代码,
1. var indexOfKeys = keys[i];
现在 indexOfKeys 会保留密钥 room-id
2. var roomMatching = rID[indexOfKeys];
此处 roomMatching 将保留对象
{ 'firebasePushId': { newDealerName: 'b',
...,
}
}
现在
3. var matchID = roomMatching.newNroomID;
这当然是未定义,因为roomMatching只有一个 property, firebasePushId 。
要访问newNroomID,您必须执行以下操作
matchID = roomMatching.firebasePushKey.newNroomID .
获取firebasePushKeys的一种方法是使用 Object.keys(roomMatching)。