Преобразование объектов Firebase в массив - PullRequest
0 голосов
/ 06 октября 2019

У меня есть рабочий код для чтения данных из Firebase. Теперь я хотел бы преобразовать объекты в массивы. Я нашел много, но, к сожалению, у меня ничего не работает. Я надеюсь, что у кого-то есть идея и она может мне помочь. Буду очень признателен за любую помощь.

  firebase.database().ref("/Verrechnung/Messner").orderByChild("Time").on('value', function(snapshot){
  let elm = document.getElementById("data");
  elm.innerHTML = '';

  snapshot.forEach(function(childSnapshot){
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    elm.innerHTML += JSON.stringify(childData.Time)
    + JSON.stringify(childData.Kennzeichen)
    + JSON.stringify(childData.Adresse) 
    + JSON.stringify(childData.Provision);
  })
})
    getData();

Firebase

Выход

 "Verrechnung" : {
        "Messner" : {
          "-Lq5fgQFGiM1OPr-vQPP" : {
            "Adresse" : "Teschnergasse 31, 1180 Wien, Österreich",
            "Kennzeichen" : "W-7637TX",
            "Provision" : "€ 1,50",
            "Time" : "20191001113751"
          },
          "-Lq6389RYSY9LPOsjr7a" : {
            "Adresse" : "Eisteichstraße, 1110 Wien, Österreich",
            "Kennzeichen" : "W-7637TX",
            "Provision" : "€ 1,50",
            "Time" : "20191001132440"
          },
          "-LqAAhgUWJs_8_AQvqX1" : {
            "Adresse" : "Gentzgasse 123, 1180 Wien, Österreich",
            "Kennzeichen" : "W-7637TX",
            "Provision" : "€ 1,50",
            "Time" : "20191002083619"
          },
          "-LqAwfg5WSYeBG8yGoIV" : {
            "Adresse" : "Raffelspergergasse, 1190 Wien, Österreich",
            "Kennzeichen" : "W-7637TX",
            "Provision" : "€ 1,50",
            "Time" : "20191002121014"
          },
          "-LqFtZJBS_-LCbsENi2a" : {
            "Adresse" : "Landwehrstraße 6, 1110 Wien, Österreich",
            "Kennzeichen" : "W-7637TX",
            "Provision" : "€ 1,50",
            "Time" : "20191003111445"
          },
        },

1 Ответ

1 голос
/ 06 октября 2019

Спасибо за ответы в ветке комментариев.

Мне кажется, это примерно правильно:

let elm = document.getElementById("data");

firebase.database().ref("/Verrechnung/Messner").orderByChild("original").on('value', (snapshot) => {
  let dataArray = {};
  snapshot.forEach((childSnapshot) => {
    dataArray[childSnapshot.key] = childSnapshot.val();
    console.log(childSnapshot.key);
  });
  elm.innerHTML = JSON.stringify(dataArray);
});

Это не дает того результата, который вы ищете- это дает только самый внутренний массив. Если вы хотите обернуть это в словари, основанные на имени коллекции (как в вашем примере), это выглядело бы немного иначе.

Очевидно, я просто вставляю массив как JSON обратно в документ, вы должны сделать все, что угодноэто правильная вещь, в которой вы нуждаетесь.

Точно так же вполне нормально объявлять dataArray и вне обратного вызова, если вам нужен доступ к нему.

Возможно, вы сможете использовать once вместоon. Смотрите здесь . Кроме того, если вы хотите, чтобы это постоянно обновлялось, использование 'value' может быть не самым эффективным режимом прослушивания.

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