Firebase& javascript - 将项目从一个列表排除到另一个列表

时间:2017-10-24 12:34:55

标签: javascript arrays firebase firebase-realtime-database

我心里一片空白。我所拥有的是2个阵列:

  1. 该应用的所有用户列表
  2. 此表单的所有用户的列表
  3. 我想要做的是返回数组1和2之间的差异。

    以下是该应用所有用户的列表:

    [{0: 
    {id: 1234, email: test@test.com}
    },{1:
    {id: 1235, email: michael@test.com}
    }]
    

    然后数组2看起来像:

    [{0: 
    {id: 1234, email: test@test.com}
    }]
    

    所以我想要一个会返回的数组(数组1和2之间的差异):

    [{0:
    {id: 1235, email: michael@test.com}
    }]
    

    以下是我生成数组1的方法:

    this.allUsersList = [];
    
    this.sharingProvider.getUsersListRef().on('child_added', userSn => {
    
      if(userSn.key) {
        this.allUsersList.push({
          id: userSn.key,
          email: userSn.val().email
        });
      }
    
    });
    

    以下是我如何生成数组2:

    this.sharingList = [];
    this.sharingProvider.getFormsUsersRef(this.formId).on('child_added', fuSnap => {
      this.sharingProvider.getUsersListRef().child(fuSnap.key).on('value', userSn => {
    
        const myUserId = this.sharingProvider.getMyUserId();
        if(userSn.key !== myUserId) {
          this.sharingList.push({
            id: userSn.key,
            email: userSn.val().email
          });
        }
      });
    });
    

    任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

您可以使用some and Foreach ...

let array1 = [
{0: 
{id: 1234, email: 'test@test.com'}
},
{1:
{id: 1235, email: 'michael@test.com'}
}
]

let array2 = [
{0: 
{id: 1234, email: 'test@test.com'}
}
],array3 = [];


array1.forEach(function(e){
  let conditional = array2.some(function(element,i){ 
  return e[i] && element[i].id === e[i].id && element[i].email === e[i].email
  });
  
  if(!conditional) array3.push(e);
});

console.log(array3);