Inconsistant不能将键命名为Firebase中的整数

时间:2014-11-26 23:39:41

标签: angularjs firebase angularfire

由于某些不可预测的行为,我在深度优先搜索存储在Firebase中的某些数据时遇到了一些麻烦。

我有以下数据结构:

"someData":
     |_______>"01":  (take note this is a key:value, not intended to be array index)
     |          |_______"child1"
     |          |_______"child2"
     |_______>"02":
                |_______"child3"
                |_______"child4"

使用:

var ref = new Firebase("https://myURL.firebaseio.com/someData");
var sync = $firebase(ref);                                
var someData = sync.$asObject();

人们期望someData成为:

 "someData" [with its children stored as OBJECT]:
     |_______>"01"  [with its children stored as OBJECT]:
     |          |_______"child1"
     |          |_______"child2"
     |_______>"02"  [with its children stored as OBJECT]
                |_______"child3"
                |_______"child4"

但是,someData变为:

 "someData" [with its children stored as ARRAY]:
     |_______>"01"  [with its children stored as OBJECT]:
     |          |_______"child1"
     |          |_______"child2"
     |_______>"02"  [with its children stored as ARRAY]
                |_______"child3"
                |_______"child4"

除了更改我的命名惯例外,有没有办法可以强制someData采用我想要的形式?

如果我有一个名为'01'的密钥,则数据将被解释为数组,尽管sync.$asObject()。 当数据被解释为OBJECT或ARRAY时,如果它具有“数字”(作为字符串)作为KEY

,我就无法解决这个问题

更新:不是真正的答案,而是一种解决方法

this is taken from Firebase blog开始:在读取位置时,如果所有对象的键看起来都像数字,则假定它是一个有序数组,可能是稀疏的,并将其作为数组返回。

因此,键看起来不像索引是很重要的。我已将我的密钥名称从“01”更改为“m01”,并且一起避免了不一致的问题。

1 个答案:

答案 0 :(得分:2)

不是答案,而是解决方法

this is taken from Firebase blog开始:在读取位置时,如果所有对象的键看起来都像数字,则假定它是一个有序数组,可能是稀疏的,并将其作为数组返回。

因此,键看起来不像索引是很重要的。我已将我的密钥更改为" m01"来自" 01",并且一起避免了不一致的问题。