2017-11-02 5 views
1

Ich versuche, ein verschachteltes Wörterbuch aus einem DataSnapshot zu extrahieren. dieseErstellen eines Arrays aus einem verschachtelten Wörterbuch

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

Dieser Code druckt:

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

Wie würde ich mich über eine Reihe von Wörterbuch Benutzer Werte zu schaffen? Oder auf sie überhaupt zugreifen.

Doing console.log(child.child("users").val()); gibt mir eine null.

Datenbankstruktur:

database structure screenshot

Antwort

1

DataSnapshot#child() Mit geben Sie einen anderen DataSnapshot für den Standort an der angegebenen relativen Pfad. Daher wird ein DataSnapshot mit Kindern als ein Elternknoten betrachtet und hat daher keinen bestimmten Wert, so dass val() hier nicht funktioniert.

Um Ihre users Wert in jedem Array zu konvertieren, müssen Sie über jedes Kind unter ihm iterieren und den Schlüssel in einem Array übergeben, so etwas wie dieses:

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

snapshot Unter der Annahme ist ein Array von Objekten, können Sie die folgenden verwenden können. Dadurch erhalten Sie alle Benutzer für jeden Datensatz.

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

console.log(users) 
Verwandte Themen