Javascript 将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

我的firebase数据库具有以下结构:

我需要用一个特殊的结构得到所有数据的数组。我就是这样做的:

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之后的示例,它正在工作!