【发布时间】: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;
});
我在上面的块中间使用了一些伪代码,因为我不确定什么适合哪里,而且不管我不知道这是正确的做法,但我就是无法包装我的寻找有效获取此类值的最佳方法,而无需在set 或update 上的表中复制冗余数据。
谢谢!
【问题讨论】:
标签: javascript angular firebase firebase-realtime-database angularfire2