首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Firebase:如何取回数组而不是对象

在 Firebase Realtime Database 或 Firestore 中,数据的存储和检索方式可能会影响你获取的数据结构。如果你希望从 Firebase 中取回一个数组而不是对象,有几种方法可以实现这一点。以下是一些常见的解决方案:

Firebase Realtime Database

存储数据为数组

在 Firebase Realtime Database 中,直接存储数组可能会导致一些问题,因为 Firebase 会将数组转换为对象,并使用索引作为键。如果你希望取回一个数组,可以考虑以下方法:

  1. 使用对象存储数组:将数组存储为对象,并在取回数据时将其转换回数组。
代码语言:javascript
复制
// 存储数据
const data = {
  0: "item1",
  1: "item2",
  2: "item3"
};

firebase.database().ref('path/to/data').set(data);

// 取回数据
firebase.database().ref('path/to/data').once('value').then(snapshot => {
  const data = snapshot.val();
  const array = Object.keys(data).map(key => data[key]);
  console.log(array); // ["item1", "item2", "item3"]
});
  1. 使用数组标识符:在存储数据时添加一个标识符,表明这是一个数组。
代码语言:javascript
复制
// 存储数据
const data = {
  items: ["item1", "item2", "item3"]
};

firebase.database().ref('path/to/data').set(data);

// 取回数据
firebase.database().ref('path/to/data').once('value').then(snapshot => {
  const data = snapshot.val();
  const array = data.items;
  console.log(array); // ["item1", "item2", "item3"]
});

Firestore

Firestore 更适合存储和检索数组,因为它支持原生数组类型。

存储数据为数组

在 Firestore 中,你可以直接存储和检索数组。

代码语言:javascript
复制
// 存储数据
const data = ["item1", "item2", "item3"];

firebase.firestore().collection('collectionName').doc('documentId').set({ items: data });

// 取回数据
firebase.firestore().collection('collectionName').doc('documentId').get().then(doc => {
  if (doc.exists) {
    const data = doc.data();
    const array = data.items;
    console.log(array); // ["item1", "item2", "item3"]
  } else {
    console.log("No such document!");
  }
});

总结

  • Firebase Realtime Database:由于 Firebase Realtime Database 会将数组转换为对象存储,建议使用对象存储数组,并在取回数据时将其转换回数组。
  • Firestore:Firestore 支持原生数组类型,可以直接存储和检索数组。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数组如何随机访问元素?数组下标为什么从0开始,不是1?

例如:数组,链表,队列,栈 等都是线性表结构。 什么是非线性表? 例如:二叉树,堆,图,等,是非线性表,是因为,在非线性表中,数据之间并不是简单的前后关系。 数组如何随机访问数组元素?...数组如何实现根据下标随机访问数组元素的吗? 例如: int[]a=newint[10] 1,计算机给数组a[10],分配了一组连续的内存空间。...同数组插入的原理类似 数组如何提高效率?...4,业务开发,使用容器足够,追求性能,首先用数组。 为什么数组要从 0 开始编号,不是1? 从偏移角度理解a[0] 0为偏移量,如果从1计数,会多出K-1。增加cpu负担。...为什么循环要写成 for(inti=0;i<3;i++)不是 for(inti=0;i<=2;i++)。

6.3K10
  • 为什么数组下标从 0 开始?不是 1?

    很多小伙伴初学编程的时候都被元素下标折磨过,为什么很多编程语言要把 0 作为第一个下标索引,不是直观的 1 呢?...www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html,感兴趣的小伙伴可以去看下全文,下面我总结几段核心的观点: 首先来看个案例,如何用一个不等式...那么我们能够迅速的写出如下四个符合上述连续序列的不等式: 1)2 <= i < 13 2)1 < i <= 12 3)2 <= i <= 12 4)1 < i < 13 以上四个不等式均满足要求,那是否有理由选择其中的一种不是另一种...Dijkstra 说有的,选 1 和 2,因为这俩不等式有个很突出的有点,就是不等式边界的差(不等式右边 - 不等式左边)正好等于连续序列的长度 这里可以排除掉 3 和 4,那么 1 和 2 该如何选出最优的表示

    87230

    为什么我应该使用指针不是对象本身

    我发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 不是, Object myObject; 或者在调用成员函数的时候,都会这样...: myObject->testFunc(); 不是, myObject.testFunc(); 我有点想不明白为什么这么做?...你需要延长对象生命周期。 意思是说你想一直使用某个地址位置的变量,不是它的副本,对于后者,我们更应该使用 Object myObject; 的语法。 你需要很多内存。...引用语义(reference semantics): 有的时候,你希望函数传递进来的参数不是一份副本(copy),因为创建副本的代价很大。这个时候,你就可以通过指针。...切片的意思就是说:在函数传参处理多态变量时,如果一个派生类对象在向上转换(upcast),用的是传值的方式,不是指针和引用,那么,这个派生类对象在 upcast 以后,将会被 slice 成基类对象

    1.4K10

    更聪明地学习,不是苦读——《如何高效学习》

    更聪明地学习,不是苦读——这是我打开 Kindle for Mac 后看到的第一句话,最近读的这本 《如何高效学习》 正是一本关于此话题的书。 关于本书 作者 Scott H....要想超出知识本身,光有热情还不够,你要寻找各种应用知识的途径(即使现在讨厌它),知识因“用”获得新的意义。 比喻就是在不熟悉的知识和熟悉的知识之间架起一座沟通的桥梁。...整体性学习的技术 作者在书中也多次提到,这些技术如果只是了解不去练习和实践,是没有什么用的。书中提供了很多「智力挑战」,具体请参考原著。...简而言之,就是假设你要给一名小白讲解这个知识点,用尽量简洁的表述让他听懂,如果有不知道如何表述的地方,那就回过头把它搞懂。 让我想起不知道在哪看的一句话:「我讲的你听懂了,代表我掌握了,不是你」。...还想起是不是华罗庚也经常用这个法子…… 超越整体性学习 一、高效秘籍 ? 二、自我教育 ?

    65670

    【JS】332- 为什么我更喜欢对象不是 switch 语句

    正文从这里开始~~~ 最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法,通常对于这种情况下,人们喜欢使用 switch...console.log('infinite'); } 控制台将输出以下内容: first second has access to first second infinite 试想一下,由此引起的错误和突变是如此之多...别急,好像我们有一个问题…… 如果我们调用带有参数的函数,会发生什么'vscode'或 fakeEditor 不是?嗯,让我们来看看: 它会寻找对象中的键。...pycharm': return 'It is an IDE'; break; default: return 'unknown'; } 我们如何使用对象来处理它...其实,很多情况下我们可以利用对象与其他组合搭配写出更为高效或可维护的代码。当然,如何去灵活地使用对象去处理一些对应的情况,还是靠我们自己。好的,这篇就总结到这了,不知道对你们有什么启发。

    1.3K40

    前端如何优雅处理类数组对象

    二、类数组对象介绍 2.1 概念介绍 所谓 类型化数组对象(简称类数组对象) 是一种类似数组对象,它提供了一种用于访问原始二进制数据的机制。...三、类数组对象属性 下面通过 Robin 代码作为示例,介绍类数组对象的属性: const memberList = $('#MemberList li'); 3.1 读写 // 读取 memberList...4.2 Array.prototype.slice.call() slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end...,对于常见的类数组对象,我们还介绍了处理方式,能很大程度减少我们处理类数组对象的操作,将类数组统一转成数组,更加方便对数据的操作。...希望看完本文的你,以后再遇到类数组对象,不会再一脸懵逼咯~~~

    1.3K30

    如何成为有创意的设计师,不是艺术家?

    有时设计做的很好,用户使用时很难发现设计的哪儿不对,因为他们设计的形式你只注意到如何去使用它们,不是观察他们设计得如何美观。...像Dribbble这样的设计网站经常强调艺术品不是设计作品。作为一种文化,我们推崇最美观的设计,却不是更实用的设计。 很容易就能看出,设计师们到底在做什么,总是让人摸不着头脑。...设计的创造性并不是为了推动事物试图突破边界,也不是为了与众不同改变事物的风格。...许多人可能会认为这些精心设计的产品“缺乏创造力”,但其他人会指出并解释这些相似性如何使设计的对象实现其预期的目标。 研究一再表明,为了改变事物改变事物是如何损害设计对象的。...一旦你这样做了,美学和闪光是只为增加亮点,不是核心的经验。

    48420

    CA1832:使用 AsSpan 或 AsMemory 不是基于范围的索引器来获取数组

    规则说明 对数组使用范围索引器并分配给内存或范围类型:Span 上的范围索引器是非复制的 Slice 操作,但对于数组上的范围索引器,将使用方法 GetSubArray 不是 Slice,这会生成数组所请求部分的副本...slice = (ReadOnlySpan)arr[a..b]; ReadOnlyMemory slice = (ReadOnlyMemory)arr[a..b]; 如何解决冲突...若要使用它,请将光标置于数组冲突上,然后按 Ctrl+。 (句点)。 从显示的选项列表中选择“在数组上使用 AsSpan 不是基于范围的索引器”。...byte> tmp3 = (ReadOnlyMemory)arr[5..8]; ... } } 相关规则 CA1831:在合适的情况下,为字符串使用 AsSpan 不是基于范围的索引器...CA1833:使用 AsSpan 或 AsMemory 不是基于范围的索引器来获取数组的 Span 或 Memory 部分 另请参阅 性能规则

    1.3K00

    Python中如何快速解析JSON对象数组

    由于浏览器可以迅速地解析JSON对象,它们有助于在客户端和服务器之间传输数据。本文将描述如何使用Python的JSON模块来传输和接收JSON数据。...对象在大括号中,数组元素住在方括号中,每个值之间用逗号隔开。在开始解析JSON之前,Python需要一些JSON来进行处理。有几件事情我们必须最初设置好。...json_string)print (data)输出:{'Student': {'ID': '3', 'name': 'kelvin', 'Group': 'A', 'Program': 'BSSE'}}解析JSON数组对象...它们可能包括嵌套数组和与JSON对象字段值相同的数据类型。使用内置包json 的json.loads() 函数,将一个JSON字符串转化为Python对象。...在Python对象中使用其索引可以从JSON数组中获得一个元素。

    63710
    领券