2017-01-02 116 views
2

我试图从我的Firebase数据库中获取一组项目,使用页面加载时生成的快照。我已经将每个对象的值添加到数组中,现在我试图将每个对象中的项目推送到具有for循环的另一个数组中。从Firebase快照获取项目数组

但是,当我创建第二个数组时,其中有更多的项目比快照中的对象。

我想知道如何解决这个问题。任何帮助都是极好的。谢谢。

代码:

var ref = firebase.database().ref().child('/scenes/' + projId).orderByChild('wordcount'); 
ref.once('value',function(snap) { 
    snap.forEach(function(item) { 
     var itemVal = item.val(); 
     keys.push(itemVal); 
     for (i=0; i < keys.length; i++) { 
      counts.push(keys[i].wordcount); 
     } 
    }); 
}); 
+0

你在哪里创建/初始化'keys'? –

+0

@FrankvanPuffelen在这段代码之前,我初始化键和计数为空数组。 – SyrupandSass

+0

很难说从目前的片段中发生了什么。你可以在jsbin/jsfiddle中重现问题吗? –

回答

7

每次再添加一些键,你遍历所有。你可能应该将它移到你的forEach外面:

var ref = firebase.database().ref().child('/scenes/' + projId).orderByChild('wordcount'); 
ref.once('value',function(snap) { 
    snap.forEach(function(item) { 
     var itemVal = item.val(); 
     keys.push(itemVal); 
    }); 
    for (i=0; i < keys.length; i++) { 
     counts.push(keys[i].wordcount); 
    } 
}); 
+0

我现在爱你。花了很长时间试图找出类似的东西。很简单,不知道为什么我不能想到这个:( – JCisar

+2

出于某种原因,我无法迭代firebase快照。最近在firebase中做了一些重大更改吗?我复制了粘贴的代码,仍然得到相同的错误:参数类型'(item:DataSnapshot)=> void'不可分配给类型为'(a:DataSnapshot)=>布尔型'的参数 类型'void'不可分配为类型'布尔值'。 –

0

@mike轴:只需在each for内添加return true即可。它适用于我...;)