我遇到了一个奇怪的问题,一旦我将值推送到Firebase对象,就会发生两件事:
length
属性。 以下是我的Firebase结构:
"user_solutions": {
"0":
{
"user_id": 0,
"clue_id": 0,
"hunt_id": 0,
"completed": 1
},
"1":
{
"user_id": 0,
"clue_id": 1,
"hunt_id": 0,
"completed": 0
},
"2":
{
"user_id": 0,
"clue_id": 1,
"hunt_id": 1,
"completed": 0
}
},
"-KHxBMZwVMzyiMIcbMdr":
{
clue_id: 1,
completed: 0,
hunt_id: 0,
user_id: 0
}
这是有问题的功能:
userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => {
var solution = snap.val();
for (var i = 0; i < solution.length; i++) {
if (solution[i].hunt_id == 0) {
solutionsForThisHunt.push(solution[i]);
}
}
this.populateArray(solutionsForThisHunt);
});
运行调试器时,solution
的值为Object {0: Object, 1: Object, 2: Object, -KHxBMZwVMzyiMIcbMdr: Object}
,但length
属性未定义。 solutionsForThisHunt
永远不会被填充。另外,我可以通过snap.val()[0]
/ snap.val()[1]
/ snap.val()[2]
在调试器中单独访问对象,但出于某种原因,当我尝试访问snap.val()[3]
时,它是未定义的,尽管它应该是填充。
答案 0 :(得分:3)
解决方案似乎是一个带键的对象,而不是一个数组。您可以执行以下操作
var solution = snap.val();
var array = Object.keys(solution).map(key => ({ ...solution[key], id: key }));
for ....