Как мне получить, чтобы мой массив из firebase имел тот же результат, что и мой статический массив?

#javascript #arrays #firebase

# #javascript #массивы #firebase

Вопрос:

Итак, я хочу переместить свои данные из массива в моем JS-приложении в Firebase, чтобы я мог легко обновлять значения, однако у меня возникают проблемы с получением значения, возвращаемого ТОЧНО так, как оно было, когда оно было статическим. Он должен быть идентичным, поскольку я перебираю каждый из players . Я уверен, что мне не хватает чего-то простого, но любая информация была бы очень признательна.

Вот как я структурировал свой статический массив:

 // Team names and player IDs for each go here

const staticTeams = [
    {
        name: 'Byron',
        players: ["192", "278", "176", "172", "37", "335"]
    },
    //etc
]; 

Вот как я извлекаю данные Firebase:

 async function getTeams(){
    let teams = []
    db.collection("teams").get().then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data() is never undefined for query doc snapshots
            let data = doc.data();
            teams.push(data)
            // console.log(doc.id, " => ", doc.data());
        });
    });
    return teams
  }; 

И я тестирую, печатая на консоли в другой функции, подобной этой:

 console.log("firebase", teams)
console.log("static", staticTeams) 

Консольные результаты ниже:

 firebase 
[]
0: {name: "Mick", players: Array(6)}
1: {name: "Scott", players: Array(6)}
2: {name: "Moir", players: Array(6)}
3: {name: "Boyd", players: Array(6)}
4: {name: "Trev", players: Array(6)}
5: {name: "Tex", players: Array(6)}
6: {name: "Cail", players: Array(6)}
7: {name: "Byron", players: Array(6)}
length: 8
__proto__: Array(0)


static 
(8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {name: "Byron", players: Array(6)}
1: {name: "Moir", players: Array(6)}
2: {name: "Cail", players: Array(6)}
3: {name: "Boyd", players: Array(6)}
4: {name: "Mick", players: Array(6)}
5: {name: "Tex", players: Array(6)}
6: {name: "Trev", players: Array(6)}
7: {name: "Scott", players: Array(6)}
length: 8
__proto__: Array(0) 

Ответ №1:

Вы можете сохранить массив пар ключ-значение, содержащий массивы в виде элементов с подобной структурой, в Cloud Firestore: введите описание изображения здесь

Или, если это должна быть точно такая же структура, которая у вас есть сейчас, она будет выглядеть примерно так: введите описание изображения здесь

Чтобы извлечь массив из Firestore, вы должны сделать что-то вроде этого:

 db.collection("teams").doc("teamDocument").get().then(function(doc) {
        teams = doc.data().team; //this would be the array field
    });
 

Комментарии:

1. Ах, вот и все. Я не установил верхний уровень как array

2. Я думаю, что проблема на самом деле заключается в том, что мой статический массив находится на «одной строке» и разделен запятой, но в моей firebase каждая команда находится на своей собственной строке. Происходит что-то странное, когда я doc.data(); помещаю его в массив teams?

3. Что вы подразумеваете под «в одной строке» и «в своей собственной строке»? Структура данных в вашем Firestore теперь должна быть такой же, как у вашего статического массива, верно?

4. Когда я печатаю оба на консоль, версия firebase выглядит вложенной firebase [] , а статическая версия разделяется запятой static (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] .

5. Какой код вы используете для извлечения данных сейчас? Если вы используете аналогичный код, как и раньше, вы можете помещать весь массив в печатаемый массив, поэтому он выглядит вложенным