遍历具有两个对象的Js数组(firebase)

时间:2018-06-27 16:20:09

标签: javascript arrays json firebase

我正在使用Firebase制作聊天应用程序。我偶然发现了一个小问题。 当向firebase数据库发出请求时,firebase将返回JSON或JS对象(我是新手,所以我并不知道)。

这是我的数据库的结构:

enter image description here

消息树下的第一个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]);
    }
  }
}

代码输出:

enter image description here

我得到一个包含两个对象的数组。到这里为止,一切正常。

我的问题是,由于消息ID未知,因此我无法弄清楚如何使用JavaScript从此处获取消息属性。

我的意思是,例如由于ID未知,我无法访问执行msgs[keys].id.message的属性。

2 个答案:

答案 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)
    });
  });
});