javascript - 从嵌套字典创建数组

标签 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

最佳答案

使用 DataSnapshot#child()将为指定相对路径的位置提供另一个 DataSnapshot。因此,具有子 Node 的 DataSnapshot 被视为父 Node ,因此没有特定值,因此 val() 在这里不起作用。

为了将您的 users 值转换为任何数组,您需要遍历它下面的每个 child 并将键传递给数组,所以像这样:

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

关于javascript - 从嵌套字典创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079449/

相关文章:

node.js - 读取 Jenkins 管道中的测试设置的环境变量

javascript - 使所需的依赖项可以从包外部访问

Node.JS Redis 连接 Microsoft Azure Web App 中的 EADDRNOTAVAIL 错误

swift - 如何有效管理 Firebase 中文档的观察者/监听者数量?

Node.js 云函数 "firestore set() inside get() if not exists"无法正常工作?

javascript - 为什么 XMLHttpRequest 不适用于 "www."?

Javascript 输入框按字符顺序搜索过滤器

javascript - jQuery getScript 问题

swift - 将评分添加到值并计算 Firebase 中的平均值

javascript - django tinymce javascript 未在非管理页面上加载