【问题标题】:How to get the key of every single object? [closed]如何获取每个对象的密钥? [关闭]
【发布时间】:2017-07-04 07:43:53
【问题描述】:

我有一个包含 json 数据的 firebase 数据库,我将它附加到 cardViews 中,我想在它单击时获取 cardView 的键,但它返回数据库中所有对象的数组 这是我的 index.js:

var rootRef = firebase.database().ref().child("Stories");
rootRef.on("child_added", snap => {
  var title = snap.child("Story Title").val();
  var content = snap.child("Story Content").val();
  $("#stories").append("<div  id=\"cold\" class=\"col s8 m6\"><div 
    class=\"card\"><div class=\"card-image\"><img 
    src=\"https://www.joshmorony.com/wp-content/uploads/2016/11/firebase.png\">
    <a  class=\"btn-floating halfway-fab waves-effect waves-light red\"><i   
    class=\"material-icons\">info</i></a></div><div class=\"card-content\"><p 
    onclick=\"viewKey()\">" + title + "</p></div></div></div>");
  });

  function viewKey() {
    firebase.database().ref('/Stories/').once('value').then(function(snapshot) {
      var storiesArray = snapshot.val();
      var keys = Object.keys(storiesArray);
      for (var i = 0; i < keys.length; i++) {
        var currentStory = storiesArray[keys[i]];
       console.log(currentStory);
      }

    });
  }

对象数组: [“-Ko8JpEjsdN2KGBdIG3f”、“-Ko8JtdcEBICVZqIXLdO”、“-Ko8TvZuu0Wh_XDGa1YW”、“-KoBR0NmVmerjomE63-V”、“-KoBSOybd5ymvOwz0Ip6”]

【问题讨论】:

  • 在 for 循环中尝试 console.log(keys[i])
  • 也仍然返回所有对象键数组
  • 你能发布你的 storiesArray 对象吗
  • 您的代码会在console.log(currentStory) 出现错误,因为currentStory 仅在for 循环内定义
  • 我编辑了问题

标签: javascript jquery firebase firebase-realtime-database


【解决方案1】:

我想这可能是答案:快照有一个键。

由于您使用的是 child_added,因此每次读取一个子项,因此每个子项 snap.key 将为您提供该子项快照的密钥。换句话说,child_added 行之后的闭包中的代码将为 Stories 节点中的每个子节点运行一次。

如果您改用 value,则将在一个“大”快照(一个父级和多个子级)中读取 Stories 节点中的所有数据。所以它看起来像

Stories
  story_0
    story_info: "ads"
  story_1
    story_info: "assad"

在这种情况下,您需要遍历 Stories 快照以获取每个孩子(story_0、story_1 等)。每个孩子都是自己的快照,拥有自己的 snapshot.key。

Work with Lists of Data on the Web

使用 child_added 时,此代码将输出每个故事的键:

var storiesRef = firebase.database().ref().child("Stories");
storiesRef.on('child_added', function(snap) {
  console.log(snap.key);
});

如果您想使用 value 一次获取所有 Stories,这将读取 Stories 节点并遍历子节点,输出每个键

storiesRef.once('value', function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    console.log(childSnapshot.key);
  });
});

请注意,上面的 child_added 函数将获取每个孩子并继续侦听 child_added 事件,而上面的 value 函数将执行一次并且不会侦听未来的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多