2017-11-02 9 views
1

DataSnapshotから入れ子になった辞書を抽出しようとしています。入れ子になった辞書から配列を作成する

var query = admin.database().ref("meetings").orderByChild("deadline"); 
query.once("value").then((snapshot) => 
{ 
    snapshot.forEach((child) => 
    { 
     console.log(snapshot.val()); 
    } 
} 

このコードを印刷この:

{ 
    '82BE0F33-6812-4EFF-8CB4-FABDACA2B329': 
    { 
     deadline: 1509634558, 
     name: 'cfedfgh', 
     users: 
     { 
      '8YUDtUJuIde8fLaHCfeuSNsHUyq2': '1', 
      DVAYNspxcGfB001RSkq3S8cxvsH3: '1', 
      fJXgRJBoFAU0SmA2Zhn4DpdyLGh1: '1' 
     } 
    } 
} 

がどのように私は辞書のユーザー値の配列を作成するに行きますか?または、それらにアクセスしてください。

Doing console.log(child.child("users").val());は私にnullを与えます。

データベースの構造:

database structure screenshot

答えて

1

DataSnapshot#child()を使用すると、あなたが指定した相対パスでの場所のための別のDataSnapshotを与えるだろう。したがって、子を持つDataSnapshotは親ノードと見なされるため、特定の値を持たないため、val()はここでは機能しません。

任意の配列にあなたのusers値を変換するために、あなたはそれの下にそれぞれの子を反復して配列にキーを渡す必要がありますので、このような何か:

snapshot.forEach((child) => { 
    let users = []; 
    if (child.child("users").exists()) { 
     child.child("users").forEach((userSnapshot) => { 
     users.push(userSnapshot.key); 
     }); 
    } 
    console.log(users); 
} 
0

snapshotを想定すると、あなたは以下を使用することができ、オブジェクトの配列です。これにより、各レコードのすべてのユーザーが表示されます。

const users = [].concat.apply([], snapshot.map(row => { 
    return Object.keys(row).map(key => { 
    return row[key].users 
    }) 
})) 

console.log(users) 
関連する問題