我试图遍历firebase中的所有用户, 并仅从特定参数创建json, 但我得到这个错误:
TypeError:无法读取属性' 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].push({"id":uid,"cash":cash});
jsonArray = JSON.stringify(temp);
});
response.send(jsonArray);
}
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
您得到的错误是因为Object没有推送方法。
你可以保持简单
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);
}
结果将是:
{
'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.push({"id":uid,"cash":cash});
});
response.send(jsonArray);
}
结果将是:
[
{ id: 'id_1', cash: 10 },
{ id: 'id_2', cash: 20}
]
这将更容易处理。