使用Firebase Admin SDK与云函数从Firestore获取对象数组的问题
解决Firebase Cloud Functions中转换数组为键值对的问题
别担心,刚上手Admin SDK遇到这种数据格式转换的问题太正常了,我来帮你搞定!
你的核心需求是把items数组里的每个对象,转换成以product为键、quantity为值的键值对对象对吧?原来的代码里用${purchaseData.items}会把数组直接转成字符串,这就是问题所在。咱们可以用JavaScript的Array.reduce()方法来轻松实现这个转换。
具体修改步骤:
- 替换你代码中
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
相关产品推荐
相关产品推荐

