如何在Firestore中使用变量作为字典的键(JavaScript)
解决Firestore中使用变量作为字典键的问题
你遇到的问题是因为在对象字面量中直接用双引号包裹模板字符串不会解析变量,导致Firestore将"role.${uid}"作为字面量键名存储。要实现用uid作为role的子键,需要使用ES6的计算属性名语法,具体有两种实现方式:
方法一:直接在update的对象中使用计算属性名
var uid = "123456"; await admin .firestore() .collection("shop") .doc(shopId) .update({ [`role.${uid}`]: "reader" // 用反引号模板字符串+方括号实现动态键 });
方法二:先构建更新对象再传入update
如果需要更清晰的代码结构,可以先创建对象并赋值动态键:
var uid = "123456"; const updatePayload = {}; updatePayload[`role.${uid}`] = "reader"; // 通过方括号访问动态键 await admin .firestore() .collection("shop") .doc(shopId) .update(updatePayload);
原理说明
- 必须用**反引号(
)**包裹模板字符串才能解析${uid}`变量; - 对象字面量中,用方括号
[]包裹表达式时,JavaScript会将表达式的计算结果作为键名,这就是计算属性名的作用。
内容的提问来源于stack exchange,提问作者taro Tanaka
相关产品推荐
相关产品推荐

