Преобразование моментального снимка Firebase в массив рекурсивно не работает правильно - PullRequest
0 голосов
/ 27 августа 2018

В моей базе данных Firebase есть следующая структура:

enter image description here

Мне нужно получить массив всех данных с специальной структурой . Вот как я это делаю:

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)'

Мой вопрос:

Как мне избежать этой проблемы? Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...