我正在使用Firebase制作聊天应用程序。我偶然发现了一个小问题。 当向firebase数据库发出请求时,firebase将返回JSON或JS对象(我是新手,所以我并不知道)。
这是我的数据库的结构:
消息树下的第一个ID是客户端的ID,当cidst连接到应用程序时,我将获得该ID。下方的ID是与已登录客户端聊天的客户端的ID,以及下面的ID(即每个消息的Firebase生成的ID)。
使用此代码(请参见下文),我正在数据库上侦听是否已添加任何消息以用于通知目的。
var ref = database.ref('messages/81k44hlET5cq2AorxLDxD1DeXV52/');
ref.on('value', gotData, errData);
function gotData(data) {
var msgs = data.val();
var keys = Object.keys(msgs);
console.log(msgs);
messages = new Array();
timestamp = new Array();
type = new Array();
for(var keys in msgs) {
if (msgs.hasOwnProperty(keys)) {
console.log(keys + " -> " + msgs[keys]);
messages.push(msgs[keys]);
}
}
}
代码输出:
我得到一个包含两个对象的数组。到这里为止,一切正常。
我的问题是,由于消息ID未知,因此我无法弄清楚如何使用JavaScript从此处获取消息属性。
我的意思是,例如由于ID未知,我无法访问执行msgs[keys].id.message
的属性。
答案 0 :(得分:0)
var ref = database.ref('messages/81k44hlET5cq2AorxLDxD1DeXV52/');
ref.on('value', gotData, errData);
function gotData(data)
{
var msgs = data.val();
var keys = Object.keys(msgs);
console.log(msgs);
messages = new Array();
timestamp = new Array();
type = new Array();
for(var keys in msgs)
{
if (msgs.hasOwnProperty(keys)) {
console.log(keys , " -> " , msgs[keys]);
messages.push(msgs[keys]);
var k = msgs[keys];
for(var keys in k){
console.log( k[keys]);
}
//
}
}
答案 1 :(得分:0)
您可以使用.forEach
方法遍历JavaScript对象,为此使用Object.entries
。
在以下代码段中,我正在记录所有消息对象
const messages = {
kjzn5ef6ke2zlfzn: {
h6qjopdbgs5d6mv7f: {
gd73g4d5d9dvtjzj15: {
message: "k",
seend: "true",
timestamp: "26/6/2018 20",
type: "send"
},
kdaz8bamd6kprmq78: {
message: "k",
seend: "true",
timestamp: "26/6/2018 20",
type: "send"
}
}
}
};
Object.entries(messages).forEach(([id1, a]) => {
Object.entries(a).forEach(([id11, b]) => {
Object.entries(b).forEach(([id111, message]) => {
console.log(id1, '=>', id11, '=>', id111, ':', message)
});
});
});