2017-03-07 13 views
0

2つのレベルの子を持つ配列をフィルタリングしようとしています。私は配列の第1レベルをフィルタリングできますが、第2レベルはフィルタリングできません。私はの下に特定のemailを持つ配列を返そうとしています。ここでは構造2次配列キーに基づくJavascript配列フィルタ

enter image description here

であり、ここでのコードです。このコードは、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" : "[email protected]", 
     "name" : "test" 
     }, 
     { 
     "email" : "[email protected]", 
     "name" : "test1" 
     } ], 
     "created_at" : 1488913112569, 
     "created_by" : "[email protected]", 
     "preview" : "", 
     "title" : "test", 
     "updated_at" : 1488913112569 
    }, 
    "-Kee7m7WkNDhrbX_0Ycb" : { 
     "collaborators" : [ { 
     "email" : "[email protected]", 
     "name" : "test" 
     }, 
     { 
     "email" : "[email protected]", 
     "name" : "test2" 
     } ], 
     "created_at" : 1488913112569, 
     "created_by" : "[email protected]", 
     "preview" : "", 
     "title" : "test", 
     "updated_at" : 1488913112569 
    } 
    } 
} 

必要な出力:メールを持っている

最初の配列のみ[email protected]

+1

データのスクリーンショットではなく、カットアンドペーストできるデータを入力してください –

+0

入力だけでなく出力も投稿してください。 – Bergi

答えて

1

私はあなたの望む出力が何であるか分かりませんが、次の例が役立つことを願っています。

これが役に立ちます。

var obj = { 
 
    "todo" : { 
 
    "-Kee7m7WkNDhrbX_0Yca" : { 
 
     "collaborators" : [ { 
 
     "email" : "[email protected]", 
 
     "name" : "test" 
 
     }, 
 
     { 
 
     "email" : "[email protected]", 
 
     "name" : "test1" 
 
     } ], 
 
     "created_at" : 1488913112569, 
 
     "created_by" : "[email protected]", 
 
     "preview" : "", 
 
     "title" : "test", 
 
     "updated_at" : 1488913112569 
 
    }, 
 
    "-Kee7m7WkNDhrbX_0Ycb" : { 
 
     "collaborators" : [ { 
 
     "email" : "[email protected]", 
 
     "name" : "test" 
 
     }, 
 
     { 
 
     "email" : "[email protected]", 
 
     "name" : "test2" 
 
     } ], 
 
     "created_at" : 1488913112569, 
 
     "created_by" : "[email protected]", 
 
     "preview" : "", 
 
     "title" : "test", 
 
     "updated_at" : 1488913112569 
 
    } 
 
    } 
 
}; 
 

 
var email = "[email protected]"; 
 
var result = []; 
 

 
for(var key in obj["todo"]) { 
 
    obj["todo"][key].collaborators.filter((x) => { 
 
    if (x.email == email) 
 
     result.push(obj["todo"][key]); 
 
    }); 
 
} 
 

 
console.log(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

'例外:プロパティを読み取ることができません '電子メール'未定義 ' –

+0

あなたのオブジェクトを投稿してください。 –

+0

質問が更新されました –

0

あなたはfilterコールバックがブール値ではなく、配列を返すようにしたいです。したがって、filterの代わりにsomeまたはeveryを協力者に使用してください。

関連する問題