2017-01-02 15 views
2

ページロードで生成されたスナップショットを使用してFirebaseデータベースから項目の配列を取得しようとしています。私は各オブジェクトの値を配列に追加しましたが、今は各オブジェクトの項目をforループを使って別の配列にプッシュしようとしています。Firebaseスナップショットから項目の配列を取得

しかし、2番目の配列を作成すると、スナップショット内にオブジェクトがあるよりも多くの項目が存在します。

どうすればこの問題を回避できるのでしょうか。どんな助けも素晴らしいだろう。ありがとう。

コード:

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の大きな変更がありましたか?あなたのコードを貼り付けたままコピーしました。タイプ '(アイテム:DataSnapshot)=>' void 'のタイプは'(a:DataSnapshot)=>ブール型 'のパラメータに割り当てられません。 タイプ' boolean 'はタイプ' boolean 'に割り当てられません。 –

0

@mike axle:forEachの中にreturn trueを追加するだけです。それは私のために働く...;)

関連する問題