从嵌套字典中创build一个数组

我试图从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' } } } 

我将如何去创build一个字典用户值的数组? 或者访问它们。

console.log(child.child("users").val()); 给我一个null

数据库结构:

数据库结构截图

使用DataSnapshot#child()将为您提供指定相对path的位置的另一个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); } 

假设snapshot是一个对象数组,你可以使用下面的代码。 这将为您提供每个logging的所有用户。

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