Javascript 如何修复TypeError:无法读取属性';推动';未定义的
我正在尝试遍历firebase中的所有用户, 并仅从特定参数创建json, 但我得到了这个错误: TypeError:无法读取未定义的属性“push” 我怎样才能修好它? 谢谢Javascript 如何修复TypeError:无法读取属性';推动';未定义的,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我正在尝试遍历firebase中的所有用户, 并仅从特定参数创建json, 但我得到了这个错误: TypeError:无法读取未定义的属性“push” 我怎样才能修好它? 谢谢 temp是一个空对象。要推送到该元素的属性,首先必须检查它是否存在(并设置为数组): admin.database(){ var jsonArray='{}'; snapshot.forEach(\u child=>{ 让现金=_child.child(“player_cash”); 让uid=\u child.key;
temp是一个空对象。要推送到该元素的属性,首先必须检查它是否存在(并设置为数组):
admin.database(){
var jsonArray='{}';
snapshot.forEach(\u child=>{
让现金=_child.child(“player_cash”);
让uid=\u child.key;
让name=_child.child(“player_name”);
var temp=JSON.parse(jsonArray);
temp[uid]=temp[uid]| |【】//temp是一个空对象。要推送到该元素的属性,首先必须检查它是否存在(并设置为数组):
admin.database(){
var jsonArray='{}';
snapshot.forEach(\u child=>{
让现金=_child.child(“player_cash”);
让uid=\u child.key;
让name=_child.child(“player_name”);
var temp=JSON.parse(jsonArray);
temp[uid]=temp[uid]| |【】//我不知道为什么要解析jsonArray
,而不只是创建它(不可变?)。
无论如何,它是一个空对象,您尝试将推到其中的一个键。如果该键不存在,则需要创建该键。
也许你应该这样做:
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);
}
我不知道为什么要解析jsonArray
,而不只是创建它(不变性?)。
无论如何,它是一个空对象,您尝试将推到其中的一个键。如果该键不存在,则需要创建该键。
也许你应该这样做:
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);
}
您得到的错误是因为对象没有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");
jsonArray[uid] = {"id":uid,"cash":cash};
});
response.send(jsonArray);
}
其结果将是:
{
'id_1': { id: 'id_1', cash: 10 },
'id_2': { id: 'id_2', cash: 20}
}
[
{ id: 'id_1', cash: 10 },
{ 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_1': { id: 'id_1', cash: 10 },
'id_2': { id: 'id_2', cash: 20}
}
[
{ id: 'id_1', cash: 10 },
{ id: 'id_2', cash: 20}
]
这将更容易处理。您得到的错误是因为对象没有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");
jsonArray[uid] = {"id":uid,"cash":cash};
});
response.send(jsonArray);
}
其结果将是:
{
'id_1': { id: 'id_1', cash: 10 },
'id_2': { id: 'id_2', cash: 20}
}
[
{ id: 'id_1', cash: 10 },
{ 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_1': { id: 'id_1', cash: 10 },
'id_2': { id: 'id_2', cash: 20}
}
[
{ id: 'id_1', cash: 10 },
{ id: 'id_2', cash: 20}
]
这将更容易处理