基于二级数组键的Javascript数组过滤器

基于二级数组键的Javascript数组过滤器,javascript,arrays,Javascript,Arrays,我正在尝试筛选一个具有两级子级的数组。我可以过滤阵列的第一级,但不能过滤第二级。我试图返回一个数组,该数组在协作者下有一个特定的电子邮件。结构如下 这是代码。此代码与电子邮件不匹配,因此返回数组中的所有项目 this.firebase.list('/todo'). map(data => data.filter((e) => { return e.collaborators.filter((x) => { return x.email == email

我正在尝试筛选一个具有两级子级的数组。我可以过滤阵列的第一级,但不能过滤第二级。我试图返回一个数组,该数组在
协作者
下有一个特定的
电子邮件
。结构如下

这是代码。此代码与电子邮件不匹配,因此返回数组中的所有项目

this.firebase.list('/todo').
map(data => data.filter((e) => {
    return e.collaborators.filter((x) => {
        return x.email == email;
    });
}));
示例JSON:

{
  "todo" : {
    "-Kee7m7WkNDhrbX_0Ycb" : {
      "collaborators" : [ {
        "email" : "test@gmail.com",
        "name" : "test"
      },
      {
        "email" : "test1@gmail.com",
        "name" : "test1"
      } ],
      "created_at" : 1488913112569,
      "created_by" : "test@gmail.com",
      "preview" : "",
      "title" : "test",
      "updated_at" : 1488913112569
    },
    "-Kee7m7WkNDhrbX_0Ycb" : {
      "collaborators" : [ {
        "email" : "test@gmail.com",
        "name" : "test"
      },
      {
        "email" : "test2@gmail.com",
        "name" : "test2"
      } ],
      "created_at" : 1488913112569,
      "created_by" : "test@gmail.com",
      "preview" : "",
      "title" : "test",
      "updated_at" : 1488913112569
    }
  }
}
所需输出:


仅包含电子邮件
test1@gmail.com

我不确定您想要的输出是什么,但希望下面的示例对您有所帮助

希望这有帮助

var obj={
“待办事项”:{
“-Kee7m7WkNDhrbX_0Yca”:{
“合作者”:[{
“电子邮件”:test@gmail.com",
“名称”:“测试”
},
{
“电子邮件”:test1@gmail.com",
“名称”:“test1”
} ],
“创建于”:1488913112569,
“创建人”:test@gmail.com",
“预览”:“,
“标题”:“测试”,
“更新地址”:1488913112569
},
“-Kee7m7WkNDhrbX_0Ycb”:{
“合作者”:[{
“电子邮件”:test@gmail.com",
“名称”:“测试”
},
{
“电子邮件”:test2@gmail.com",
“名称”:“test2”
} ],
“创建于”:1488913112569,
“创建人”:test@gmail.com",
“预览”:“,
“标题”:“测试”,
“更新地址”:1488913112569
}
}
};
var电子邮件=”test1@gmail.com";
var结果=[];
用于(obj[“todo”]中的var键){
obj[“todo”][key]。协作者。筛选器((x)=>{
如果(x.email==电子邮件)
结果.推(obj[“todo”][键]);
});
}
控制台日志(结果)

您希望
过滤器
回调返回布尔值,而不是数组。因此,请对合作者使用或而不是
过滤器

请提供可以剪切和粘贴的数据,而不是数据的屏幕截图。请不仅发布输入,而且发布所需的输出。好的,请发布您的对象。当电子邮件匹配
test1@gmail.com
。我实际上看到x.email==email有效。但是由于某种原因,第一个过滤器返回整个数组列表
todo
。这对我很有用!我也得到了与基本for循环相同的结果