Firebase值已正确拉出但无法访问?

时间:2016-05-17 12:29:07

标签: javascript arrays reactjs firebase react-native

我遇到了一个奇怪的问题,一旦我将值推送到Firebase对象,就会发生两件事:

  1. 当我从Firebase中提取对象时,我无法在我收到的数组中访问它。
  2. 我收到的数组没有length属性。
  3. 以下是我的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]时,它是未定义的,尽管它应该是填充。

1 个答案:

答案 0 :(得分:3)

解决方案似乎是一个带键的对象,而不是一个数组。您可以执行以下操作

var solution = snap.val(); 
var array = Object.keys(solution).map(key => ({ ...solution[key], id: key }));
for ....