使用includes检查深度数组中的数据(Firebase检索数据JS)

时间:2017-09-09 07:39:57

标签: javascript arrays firebase firebase-realtime-database

所以我是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);
    });
 }

在控制台中输出

enter image description here

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

2 个答案:

答案 0 :(得分:0)

我还没有测试过,但我希望你能得到这个想法。这也是不是最有效的方式

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
}

答案 1 :(得分:0)

您应该使用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);
});