База данных Firebase Realtime не хранит массивы.Вместо этого он хранит их как обычные объекты JavaScript, которые просто имеют последовательные цифровые ключи.Таким образом, данные, которые вы храните, на самом деле хранятся так:
{
"icons": {
"0": { "type": "animal", "url": "...", "alt": "Dog icon." },
"1": { "type": "animal", "url": "...", "alt": "Cat icon." },
"2": { "type": "animal", "url": "...", "alt": "Dog icon." },
"3": { "type": "animal", "url": "...", "alt": "Cat icon." },
"4": { "type": "animal", "url": "...", "alt": "Dog icon." },
...
}
}
Таким образом, когда вы выполняете запрос, вы получаете подмножество этих результатов.В вашем случае кажется, что вы получаете результаты с 5 по 8. Когда клиент Firebase получает результат, который выглядит как массив, он преобразует его обратно в массив.Но для этого необходимо, например, чтобы индекс первого результата был 0
, чего в данном случае нет.Таким образом, вместо этого вы получаете необработанный результат из JSON.
Чтобы получить его в массив, вы должны преобразовать его самостоятельно.Это довольно просто, с чем-то вроде:
database.ref('icons').orderByChild('type').equalTo('animal').on('value', snap => {
let result = [];
snap.forEach(child => {
result.push(child.val());
});
console.log(result);
})
Также смотрите: