javascript - Firebase 快照返回对象而不是数组来迭代

标签 javascript angular firebase firebase-realtime-database

使用 Firebase 和 Angular 5,我使用快照方法检索数据而不监听更改。我想保留每个项目的索引/键,因为它用于链接以导航到所单击项目的页面。

这是TS:

  features = [];
  notfeatures = [];
  constructor(private Svc: Service, private http: HttpClient){

    firebase.database().ref('/reviews').once('value').then((snapshot)=> {
      console.log("snapshot", (snapshot.val()));
    ..........

记录 (snapshot.val()) 给我一个对象(我无法迭代):

-L6ZwjBbyi4jz21OEoST: {category: "Movies", contributor: "CF1", feature: "No", …}

randomkey1: {category: "Movies", contributor: "CF1", feature: "No", …}

randomkey2: {category: "Movies", contributor: "DS1", feature: "Yes", …}

randomkey3: {category: "TV", contributor: "KH1", feature: "No", …}

所以,我使用 forEach 一个一个地获取所有项目,并在满足条件时将它们推送到两个不同的数组。

      ..........
      snapshot.forEach(snapshot => {
          console.log(snapshot.key, snapshot.val());
          if (snapshot.val().feature == "Yes") {
            this.features.push(snapshot.val())
            console.log("feature", this.features)
          }
          if (snapshot.val().feature == "No") {
            this.notfeatures.push(snapshot.val())
            console.log("notfeature", this.notfeatures)
          }
      });
    })

  }

但是,这样做意味着我丢失了导航所需的 snapshot.key。 如何保留每个项目的 snapshot.key 用于导航/数据目的?

最佳答案

首先,不能遍历 snapshot.val() 返回的对象是不正确的。你当然可以 iterate over the key/value pairs in a javascript object使用 for (x in y) 语法。

但是如果您想在保留唯一键的同时遍历快照中的子对象,您可以将该值放入子对象中:

const val = snapshot.val()
val.id = snapshot.key
this.features.push(val)

现在您有一个快照对象,该对象具有名为 id 的新属性,其中包含唯一键。

关于javascript - Firebase 快照返回对象而不是数组来迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121302/

相关文章:

javascript - 在 Angular 中监听自定义 DOM 事件

firebase - 错误 : Project with path ':@react-native-firebase_app' could not be found in project ':@react-native-firebase_auth'

android - 应用程序被杀死时未收到推送

ios - 从 firestore 下载一系列文档

javascript - Zepto 中的事件

javascript - 在排序数组中查找/跟踪元素

javascript - Bootstrap Dropdown 选择正在*所有* 下拉菜单上设置选择

javascript - 从一段文本中找出javascript中的关键字

angular - 使用异步/等待时,错误处理程序返回默认值

Angular 5 ngrx 效果没有导出成员 'ofType'