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

使用Firebase Admin SDK与云函数从Firestore获取对象数组的问题

解决Firebase Cloud Functions中转换数组为键值对的问题

别担心,刚上手Admin SDK遇到这种数据格式转换的问题太正常了,我来帮你搞定!

你的核心需求是把items数组里的每个对象,转换成以product为键、quantity为值的键值对对象对吧?原来的代码里用${purchaseData.items}会把数组直接转成字符串,这就是问题所在。咱们可以用JavaScript的Array.reduce()方法来轻松实现这个转换。

具体修改步骤:

  1. 替换你代码中items那一行的内容,把数组通过reduce转换成目标格式:
items: purchaseData.items.reduce((acc, item) => {
  acc[item.product] = item.quantity;
  return acc;
}, {})

这个reduce方法的作用是:

  • 初始化一个空对象{}作为累加器acc
  • 遍历items数组里的每个元素,把当前元素的product作为键,quantity作为值添加到累加器中
  • 最后返回这个组装好的键值对对象

修改后的完整函数代码:

exports.productPurchased = functions.firestore
  .document('purchases/{productPurchaseId}')
  .onCreate((doc, context) => {
    const documentId = context.params.productPurchaseId;
    const purchaseData = doc.data();

    // 转换items数组为键值对对象
    const formattedItems = purchaseData.items.reduce((acc, item) => {
      acc[item.product] = item.quantity;
      return acc;
    }, {});

    const purchase = {
      amount: `${purchaseData.amount}`,
      uid: `${purchaseData.user_id}`,
      phoneNumber: `${purchaseData.phone}`, 
      items: formattedItems, // 这里用转换后的对象
      docId: documentId,
      createdOn: admin.firestore.FieldValue.serverTimestamp()
    }

    return productPurchase(purchase);
  })

这样处理后,purchase.items就会变成你想要的格式:

{
  "productOne": "2",
  "productTwo": "3"
}

如果你的items数组有可能为空,这段代码也能正常返回空对象,不会报错,很安全。

内容的提问来源于stack exchange,提问作者Sky Lurk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:45:46