#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. Какой код вы используете для извлечения данных сейчас? Если вы используете аналогичный код, как и раньше, вы можете помещать весь массив в печатаемый массив, поэтому он выглядит вложенным