Javascript 将firebase快照递归转换为阵列无法正常工作
我的firebase数据库具有以下结构: 我需要用一个特殊的结构得到所有数据的数组。我就是这样做的:Javascript 将firebase快照递归转换为阵列无法正常工作,javascript,arrays,firebase,recursion,firebase-realtime-database,Javascript,Arrays,Firebase,Recursion,Firebase Realtime Database,我的firebase数据库具有以下结构: 我需要用一个特殊的结构得到所有数据的数组。我就是这样做的: const isObject = obj => { return Object.prototype.toString.call(obj) === '[object Object]' ? true : false; }; function snapshotToArray(snapshot) { var returnArr = []; snapshot.forEa
const isObject = obj => {
return Object.prototype.toString.call(obj) === '[object Object]' ? true : false;
};
function snapshotToArray(snapshot) {
var returnArr = [];
snapshot.forEach(function(childSnapshot) {
var item = childSnapshot.val();
item.key = childSnapshot.key;
returnArr.push(item);
if (isObject(item)){
returnArr = returnArr.concat(snapshotToArray(childSnapshot));
}
});
return returnArr;
};
并称之为:
snapshotToArray(snapshot); // 'snapshot' is the data from database in a snapshot format
获取:
[ { 'Diciembre-2018': { '-LJV5UxepDNSR5yUCDbf': [Object] },
'Julio-2018': { '-LJUt8yTjpK3oq2wRd_g': [Object] },
key: '2018' },
{ '-LJV5UxepDNSR5yUCDbf':
{ pin: 'mi-pin-dic',
timestamp: 'Thu Aug 09 2018 13:11:39 GMT-0600 (GMT-06:00)' },
key: 'Diciembre-2018' },
{ pin: 'mi-pin-dic',
timestamp: 'Thu Aug 09 2018 13:11:39 GMT-0600 (GMT-06:00)',
key: '-LJV5UxepDNSR5yUCDbf' },
'mi-pin-dic',
'Thu Aug 09 2018 13:11:39 GMT-0600 (GMT-06:00)',
{ '-LJUt8yTjpK3oq2wRd_g':
{ pin: 'mi-pin-julio',
timestamp: 'Thu Aug 09 2018 12:13:21 GMT-0600 (GMT-06:00)' },
key: 'Julio-2018' },
{ pin: 'mi-pin-julio',
timestamp: 'Thu Aug 09 2018 12:13:21 GMT-0600 (GMT-06:00)',
key: '-LJUt8yTjpK3oq2wRd_g' },
'mi-pin-julio',
'Thu Aug 09 2018 12:13:21 GMT-0600 (GMT-06:00)' ]
但正如您所见,在第3次和第5次迭代中,它获得了一个额外的数据:
'mi-pin-dic',
'Thu Aug 09 2018 13:11:39 GMT-0600 (GMT-06:00)',
'mi-pin-julio',
'Thu Aug 09 2018 12:13:21 GMT-0600 (GMT-06:00)'
我的问题:
我怎样才能避免这个问题?有什么想法吗?似乎pin和时间戳也被归类为object。我会尝试isObject(childSnapshot.val())而不是isObject(item)。我尝试了你的想法,但没有成功:(你能用object.prototype.toString.call(childSnapshot.val())打印出每次迭代的childSnapshot.val()类型吗?我移动了你的代码
isObject(childSnapshot.val())
foreach之后的示例,它正在工作!