从嵌套字典创建数组

时间:2017-11-02 15:50:17

标签: javascript node.js firebase firebase-realtime-database

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

我如何创建字典用户值数组?或者完全访问它们。

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

数据库结构:

database structure screenshot

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

假设snapshot是一个对象数组,您可以使用以下内容。这将为您提供每条记录的所有用户。

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

console.log(users)