You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Firebase查询结果正确存入数组?

解决Firebase查询结果无法正确存入数组的问题

你当前代码的核心问题是数组objectArr被定义在forEach循环内部,每次循环都会重新创建一个空数组,导致每次只能存入当前遍历到的单个对象,循环结束后也无法保留完整的结果集合。

修正后的代码如下:

onAuthStateChanged(auth, (user) => {
  if (user) { 
    const userID = user.uid
    const objectDoc = query(collection(db, "objects"), where("user", "==", userID));

    const getObjectDoc = async () => {
      const querySnapshot = await getDocs(objectDoc);
      // 把数组声明移到循环外部,确保全程使用同一个数组
      let objectArr = []
      querySnapshot.forEach((doc) => {
        console.log("当前对象 => ", doc.data());
        objectArr.push(doc.data())
      });
      // 循环结束后打印完整数组
      console.log("全部对象数组 => ", objectArr)
    }

    getObjectDoc()
  } else {}
})

关键修正点:

  • 将let objectArr = []移至forEach循环外部,避免每次循环重置数组
  • 在循环结束后统一操作完整数组(比如打印、后续业务逻辑处理),而不是在循环内部单次打印

另外,你也可以使用querySnapshot.docs.map()方法更简洁地生成结果数组:

const getObjectDoc = async () => {
  const querySnapshot = await getDocs(objectDoc);
  const objectArr = querySnapshot.docs.map(doc => doc.data());
  console.log("全部对象数组 => ", objectArr)
}

这种方式利用数组map方法直接将查询快照中的每个文档数据转换为数组元素,代码更简洁高效。

内容的提问来源于stack exchange,提问作者234htjBB23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:55:24