【问题标题】:Iterate over a Js array with two objects (firebase)用两个对象迭代一个 Js 数组(firebase)
【发布时间】:2018-06-27 16:20:09
【问题描述】:

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

这是我的数据库的结构:

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

代码的输出:

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

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

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

【问题讨论】:

  • 那么你想在你的 JS 中使用 fb 对象吗
  • 而不是console.log(keys + " -> " + msgs[keys]); 这样做console.log(keys , " -> " , msgs[keys]);
  • 我正在尝试从对象中获取 msg 属性(消息、时间戳...)
  • @Prashant 我现在就试试(我也是 js 新手)
  • 好的,感谢@Prashant,我知道了,我将代码更新为此,现在可以访问我的消息属性。谢谢! if (msgs.hasOwnProperty(keys)) { console.log(keys , " -> " , msgs[keys]);消息.push(msgs[keys]); var k = msgs[键]; for(var keys in k){ console.log(k[keys]); }

标签: javascript arrays json firebase


【解决方案1】:
        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]);
                    }
                    //
                }
    }

【讨论】:

  • 如果不是实际答案,请不要发布答案。而是直接编辑您的问题。谢谢。
【解决方案2】:

您可以使用.forEach 方法迭代您的JavaScript 对象,为此使用Object.entries

在下面的代码 sn-p 中,我记录了所有的消息对象

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

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2021-04-25
    • 2012-08-10
    • 2019-12-03
    相关资源
    最近更新 更多