【问题标题】:Checking data in deep array with includes (Firebase retrieve data JS)使用包含检查深度数组中的数据(Firebase 检索数据 JS)
【发布时间】:2017-09-11 01:52:33
【问题描述】:

所以我是 Firebase 数据库的新手,我喜欢它的地方是我不必构建一个完整的后端来存储一些简单的数据。我想做的是将数据推送到我喜欢从 firebase 接收的数组中。然后,我想检查填写的电子邮件是否包含在 firebase 数据库的数据中。但是因为它是 firebase 并且它有多个数组、对象等,所以我不知道如何检查。所以流程是:用户填写数据,应用程序调用 firebase 数据库,应用程序正在从 firebase 检索当前数据。然后应用程序将检查输入的数据是否已经存在,如果存在,将发出数据已在数据库中的警报。否则,将提交数据。

另外,我想知道这是否是从数据库中检索数据的正确方法:

Main.js

function writeUserData() {

    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;

    firebase.database().ref('/aanmeldingen/').push({
      username: name,
      email: email,
    });

    var dbRef = firebase.database().ref().child('/aanmeldingen/');
    dbRef.on('value', snapshot => {
      const snap = snapshot.val();
      const array = [];

      array.push(snap);
      console.log(array);

      const res = array.includes(email);
      console.log(res);
      console.log(email);
    });
 }

控制台输出

如您所见,这会返回多个数据。包含功能将检查提交的电子邮件地址。即使我输入了“info@webpack.com”,这也会返回 false。如何检查正确的数据对象?如果提交的电子邮件地址已经存在,它必须检查“0”下的所有对象并在控制台中返回。

【问题讨论】:

  • 当您进行推送时,Firebase 似乎应该返回一个对象,我希望它包含您以后可以用来引用它的条目的 ID(即您看到的有趣字符串当您稍后读取数据时)检查它们是否在数据库中。否则,您将进行不同的查询以检查是否存在具有“电子邮件”键的特定值的记录。

标签: javascript arrays firebase firebase-realtime-database


【解决方案1】:

我还没有测试过,但我希望你能明白。此外,这不是最有效的方式

function ifEmailExist(arr,email){
    var _t = 0;
    for(var x in arr){
        for(var y in arr[x]){
            if(arr[x][y].email){
                if(arr[x][y] === email){
                    _t++;
                }
            }
        }
    }
    return _t;
}

用法:

if(ifEmailExist(arr,"info@webpack.com") > 0){
   //do stuff
}

【讨论】:

  • 看来这个总会返回false
【解决方案2】:

您应该使用child_added 而不是value。每当在数据库中添加新节点时,child_added 都会触发,然后您可以对数据进行操作。

var dbRef = firebase.database().ref().child('aanmeldingen');
dbRef.on('child_added', snapshot => {
  var username = snapshot.val().username;
  var email = snapshot.val().email;

  console.log(username);
  console.log(email);
});

【讨论】:

  • 嗯,也许我的问题不够清楚。我想要的是从 firebase 检索所有数据以检查输入的值是否已经在数据库中。如果是这样,请不要提交数据。
  • 我对描述进行了一些编辑,以明确我想要实现的目标。
  • @Gijsberts 您甚至不需要 JS 代码来检查唯一值,因为您可以使用 Firebase 数据库安全规则。查看thisthis
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多