2017-12-30 49 views
-1
私は、 をfirebase、 内のすべてのユーザーを反復処理して、特定のparamsからJSONを作成しようとしている

のプロパティ「プッシュ」を読み取ることができませんが、私はこのエラーを取得:TypeError例外を修正する方法:未定義

TypeError: Cannot read property 'push' of undefined

どうすれば修正できますか? ありがとう

admin.database().ref("players").once('value', (snapshot, y) => { 

     var jsonArray = '{}'; 

     snapshot.forEach(_child => { 

      let cash = _child.child("player_cash"); 
      let uid = _child.key; 
      let name = _child.child("player_name"); 

      var temp = JSON.parse(jsonArray); 
      temp[uid].push({"id":uid,"cash":cash}); 
      jsonArray = JSON.stringify(temp); 
     }); 

     response.send(jsonArray); 
} 

答えて

1

tempは空のオブジェクトです。その要素のプロパティにプッシュするには、最初にそれが存在する(と配列に設定)かどうかを確認する必要がかどうか:

admin.database().ref("players").once('value', (snapshot, y) => { 

     var jsonArray = '{}'; 

     snapshot.forEach(_child => { 

      let cash = _child.child("player_cash"); 
      let uid = _child.key; 
      let name = _child.child("player_name"); 

      var temp = JSON.parse(jsonArray); 
      temp[uid] = temp[uid] || [];   // <======== 
      temp[uid].push({"id":uid,"cash":cash}); 
      jsonArray = JSON.stringify(temp); 
     }); 

     response.send(jsonArray); 
} 
0

あなたは(jsonArrayを解析するだけではなく、それを作成し、なぜ私はわからないんだけど不変性?)。
とにかく空のオブジェクトで、その内部のキーにpushをしようとします。キーが存在しない場合は、そのキーを作成する必要があります。 はたぶん、あなたは、このようにそれを実行する必要があります。

admin.database().ref("players").once('value', (snapshot, y) => { 

     var jsonArray = '{}'; 

     snapshot.forEach(_child => { 

      let cash = _child.child("player_cash"); 
      let uid = _child.key; 
      let name = _child.child("player_name"); 

      var temp = JSON.parse(jsonArray); 
      temp[uid] = temp[uid] || []; // create the key if its not already there 
      temp[uid].push({"id":uid,"cash":cash}); 
      jsonArray = JSON.stringify(temp); 
     }); 

     response.send(jsonArray); 
} 
0

オブジェクトがpushメソッドを持っていないので、あなたが取得しているエラーです。今、私はあなたが結果を保存する代わりに、オブジェクトの配列を使用することをお勧め

{ 
    'id_1': { id: 'id_1', cash: 10 }, 
    'id_2': { id: 'id_2', cash: 20} 
} 

あなたは、この結果がなる

admin.database().ref("players").once('value', (snapshot, y) => { 
    var jsonArray = {}; 

    snapshot.forEach(_child => { 

     let cash = _child.child("player_cash"); 
     let uid = _child.key; 
     let name = _child.child("player_name"); 

     jsonArray[uid] = {"id":uid,"cash":cash}; 
    }); 

    response.send(jsonArray); 
} 

物事をシンプルに保つことができますdbの。

admin.database().ref("players").once('value', (snapshot, y) => { 
    var jsonArray = []; 

    snapshot.forEach(_child => { 

     let cash = _child.child("player_cash"); 
     let uid = _child.key; 
     let name = _child.child("player_name"); 

     jsonArray.push({"id":uid,"cash":cash}); 
    }); 

    response.send(jsonArray); 
} 

この結果は以下のようになります。

[ 
    { id: 'id_1', cash: 10 }, 
    { id: 'id_2', cash: 20} 
] 

これは、処理するために容易になります。

関連する問題