【问题标题】:Firebase, variable as key nameFirebase,变量作为键名
【发布时间】:2014-09-07 06:20:06
【问题描述】:

我基本上想做的是:

variable = 'whatever';
fb.set({ variable : "More Stuff" });

所以这将导致如下所示的条目:

whatever: "More Stuff"

目前它只是结束了

variable: "More Stuff"

这个可以吗?

【问题讨论】:

标签: javascript variables firebase


【解决方案1】:

对于最新版本的 Firebase,请在变量名前后使用方括号:

firebase.database().ref("pathName").set({[variable] : 'MoreStuff'});

使用其他方法将变量的索引设置为值将在数据库结构中创建一个附加层。

【讨论】:

  • 推送方法可以用同样的方法吗?
  • 以非常抽象的方式使用这种方法可以吗?即,您可以在文档中有 3 个字段,而不是为每个字段编写 set 方法,即 setName、setAge、setDescription,是否可以使用 setData(fieldKey, fieldValue) 之类的方法,因此可以省去编写相同的方法函数 3 次,但它是否使可测试性或可扩展性变得困难?
  • 我在文档中到处阅读。您在哪里找到此信息?
  • 老实说,我只是尝试了一些对我有意义的不同想法,直到它奏效为止,因为我在文档中也找不到任何东西。
【解决方案2】:

是的。代码没有按预期工作,因为您使用的是对象文字表示法,这就是它将变量名称保留为键的原因,因为这就是表示法的工作方式。

解决方案

foo = {}; 
foo[variable] = 'more stuff'; 
fb.set(foo);

【讨论】:

  • 这种情况下是 x foo 吗?
  • @MattCoady 是的,我把它改成了 foo ;)
  • 这实际上设置了一个键foo,其值为[variable]: 'more stuff'
【解决方案3】:

事实证明 @randomnamehere 的命令并没有完全达到我的预期,因为我想在引用中使用累积的数字 - 或者在你的情况下,命名索引 - 同时仍然保留多个索引。所以正确的命令实际上应该是

firebase.database().ref(`pathName/${variable}`).set('More Stuff');

他的原始答案实际上会用其中的单个命名索引替换整个引用。我知道,因为我学得很辛苦:P

【讨论】:

    【解决方案4】:

    您可以创建一个 Empty object 并将您的变量设置为它的属性并为其分配一个值。请看下面:

    let object: any = {};
     object[variable] = value
    

    【讨论】:

    • 虽然这可能是正确的答案,但它太短了,不能成为一个好的答案。请提供更多详细信息和参考。
    猜你喜欢
    • 2011-12-30
    • 2019-12-01
    • 2016-09-12
    • 2014-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多