gpt4 book ai didi

javascript - 如何通过两个不同的索引访问相同的Firebase数据?

转载 作者:行者123 更新时间:2023-12-03 08:57:09 25 4
gpt4 key购买 nike

我正在尝试构建一个团队运动时间表的交互式矩阵,其中行是每个团队,列是每周。这是一个幸存者池,用户每周只能选择一名获胜者,每个团队每年只能选择一次。因此,当用户点击给定的游戏时,相关的行和列应设置为非事件状态。我是 noSQL 新手,所以我不知道如何按团队和周与游戏进行交互。

正因为我使用 Firebase 作为后端,所以我从 .json 文件结构开始,其中包含 $firebaseArrayteams,每个一个嵌套的schedule,如下所示:

{
"teams": {
"California": {
"slug": "california",
"chosen": false,
"schedule": [
{
"week": 1,
"opponent": "Grambling St",
"selected": false,
"available": true
},
{
"week": 2,
"opponent": "San Diego St",
"selected": false,
"available": true
},
{
"week": 3,
"opponent": "at Texas",
"selected": false,
"available": true
},
{
"week": 4,
"opponent": "at Washington",
"selected": false,
"available": true
},
{
"week": 5,
"opponent": "Washington St",
"selected": false,
"available": true
},
{
"week": 6,
"opponent": "at Utah",
"selected": false,
"available": true
},
{
"week": 7,
"opponent": "Bye",
"selected": false,
"available": true
},
{
"week": 8,
"opponent": "at UCLA",
"selected": false,
"available": true
},
{
"week": 9,
"opponent": "USC",
"selected": false,
"available": true
},
{
"week": 10,
"opponent": "at Oregon",
"selected": false,
"available": true
},
{
"week": 11,
"opponent": "Oregon St",
"selected": false,
"available": true
},
{
"week": 12,
"opponent": "at Stanford",
"selected": false,
"available": true
},
{
"week": 13,
"opponent": "Arizona St",
"selected": false,
"available": true
}
]
},

"Oregon": {
"slug": "oregon",
"chosen": false,
"schedule": [
{
"week": 1,
"opponent": "EWU",
"selected": false,
"available": true
},
{
"week": 2,
"opponent": "at Michigan St",
"selected": false,
"available": true
},
{
"week": 3,
"opponent": "Georgia St",
"selected": false,
"available": true
},
{
"week": 4,
"opponent": "Utah",
"selected": false,
"available": true
},
{
"week": 5,
"opponent": "at Colorado",
"selected": false,
"available": true
},
{
"week": 6,
"opponent": "Washington St",
"selected": false,
"available": true
},
{
"week": 7,
"opponent": "at Washington",
"selected": false,
"available": true
},
{
"week": 8,
"opponent": "Bye",
"selected": false,
"available": true
},
{
"week": 9,
"opponent": "at Arizona St",
"selected": false,
"available": true
},
{
"week": 10,
"opponent": "California",
"selected": false,
"available": true
},
{
"week": 11,
"opponent": "at Stanford",
"selected": false,
"available": true
},
{
"week": 12,
"opponent": "USC",
"selected": false,
"available": true
},
{
"week": 13,
"opponent": "Oregon St",
"selected": false,
"available": true
}
]
},

我可以轻松地通过行级别的 ng-repeat="team in groups" 和 team.schedule 中的另一个 gametd级别。将关联的 team.chosen 设置为 true 会将行标记为非事件状态,但我不确定如何按周(列)执行相同操作。

========

我决定使用不同的数据结构再尝试一次,这次将 games 分解为与 teams 分开的自己的表,如下所示:

{
"teams": {
"California": {
"chosen": false,
"slug": "california"
},

"Oregon": {
"chosen": false,
"slug": "oregon"
},

"Oregon St": {
"chosen": false,
"slug": "oregon-st"
},

"Stanford": {
"chosen": false,
"slug": "stanford"
},

"Washington": {
"chosen": false,
"slug": "washington"
},

"Washington St": {
"chosen": false,
"slug": "washington-st"
}
},

"games": {
"one": {
"Stanford": "at Northwestern",
"Washington": "at Boise St",
"California": "Grambling St",
"Oregon": "EWU",
"Oregon St": "Weber St",
"Washington St": "Portland St"
},
"two": {
"Stanford": "UCF",
"Washington": "Sacramento St",
"California": "San Diego St",
"Oregon": "at Michigan St",
"Oregon St": "at Michigan",
"Washington": "at Rutgers"
},
"three": {
"Stanford": "at USC",
"Washington": "Utah St",
"California": "at Texas",
"Oregon": "Georgia St",
"Oregon St": "San Jose St",
"Washington": "Wyoming"
}
}
}

这并没有取得更好的效果,因为我无法在的 ng-repeat 内达到游戏对象的值。

我怀疑在 Firebase 中构建这些数据时缺少某些内容。非常感谢任何帮助。

最佳答案

其中的随机部分是用户点击的矩阵中的单元格(他们选择的内容),那么如何跟踪每个选择呢? children 会选择谁的 user_id、周#(列)和 team_id(行)。

pick_id_x 将是随机生成的 Firebase 节点名称 (childByAutoId)

picks_node:
pick_id_0:
user: user_id
week: week #
team: team_id
pick_id_1:
user: user_id
week: week #
team: team_id

使用此结构,您可以查询周、团队或用户,并且选择节点中出现的任何内容都将被选择,因此无法再次选择它(您可以在 UI 中解决该问题)。因此,您可以根据源数据填充矩阵行和列,然后加载此选择列表并每周和团队“排除”。

您可以用它来回答“我想知道哪个用户在第 3 周选择了哪个团队”或“哪个团队受到最多用户喜欢”的问题。

(我使用了 team_id,但如果您想保留更多游戏数据,也可以是 game: game_id_x)

games_node:
game_id_0:
t1: home_team
t2: visiting_team
game_id_1:
t1: home_team
t2: visiting_team

请注意,我将数据与其键(节点名称、引用,无论您想如何调用它)解除了关联。

一般来说,对于 Firebase:越扁平越好,并且不要对绝对数据进行硬编码。

关于javascript - 如何通过两个不同的索引访问相同的Firebase数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com