【问题标题】:How do I properly compute child data?如何正确计算子数据?
【发布时间】:2017-02-05 18:44:48
【问题描述】:

给定以下数据结构,根据experience 为每个character 获取level 的最有效方法是什么?我知道我可以level 与其他属性一起存储,但希望有一种方法可以不这样做。

{
  "characters": {
    "-k1239748": {
      "name": "Ada",
      "experience": 0
    },
    "-k827493": {
      "name": "Beth",
      "experience": 2331
    },
    "-k344432": {
      "name": "Carol",
      "experience": 4789
    }
  },
  "levels": {
    "-k123433": {
      "level": 1
      "minimumExperience": 0
    },
    "-k412312": {
      "level": 2
      "minimumExperience": 2000
    },
    "-k113433": {
      "level": 3
      "minimumExperience": 4000
    }
  }
}

预期的输出是:

ada.level = 1
beth.level = 2
carol.level = 3

我的假设是没有比以下更简单的方法了:

  • 获取characters列表
  • complete 块中获取levels 的列表
  • 遍历每个 character 并将 character.level 属性分配给我从某个函数中获得的任何内容,我将创建名为 getLevelForExperience(experience) 的函数。

我觉得这有点乏味和不必要,特别是当我来自 SQL 时,我可以只做一个 JOIN,或者在 C# 中有一些计算属性,可以只在需要时从函数中获取一个值,等等

我正在寻找的是执行以下操作的语法:

this.af.database.list('/characters')
  .map(characterResult => {
    this.af.database.list('/levels').startAt(result.experience).first()
      .subscribe(levelResult => {
        result.level = levelResult;
      });

    return characterResult;
  });

我在上面的块中间使用了一些伪代码,因为我不确定什么适合哪里,而且不管我不知道这是正确的做法,但我就是无法包装我的寻找有效获取此类值的最佳方法,而无需在setupdate 上的表中复制冗余数据。

谢谢!

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database angularfire2


    【解决方案1】:

    我只需加载所有关卡并选择正确的客户端。

    我还会考虑稍微不同地存储关卡,因为随着时间的推移,ID 似乎会妨碍它们:

    "levels": {
      "exp0": 1
      "exp2000": 2
      "exp4000": 3
    }
    

    您甚至可以考虑在这里使用数组:

    "levels": [0, 2000, 4000]
    

    虽然您必须将级别偏移 1,或者在此处使用额外的 null 填充:

    "levels": [null, 0, 2000, 4000]
    

    【讨论】:

    • 在上面的例子中,我减少了一些数据,但是这些级别都有更多的数据,所以减少到一个数组是行不通的。无论如何,我特别想弄清楚使用 AngularFire2 和/或 Observable 模式作为一个整体,使用内部订阅/地图等等。不是真正的模式结构。例如,想象一下,在拉入每个特定用户并将其全部显示在用户列表旁边之后,我需要评估子数据。
    猜你喜欢
    • 2023-02-24
    • 2020-10-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多