如何正确判断Firestore文档中的字段是否为Map类型?
问题描述
我在Firestore的文档里设置了一个map字段,类型为Map(如图所示):
我使用以下代码从Firestore读取该文档:
async function getJohn() { var ref = doc(db, "users/john"); const document = await getDoc(ref); if(document.exists()) { let map = document.data().map if (map instanceof Map) { alert("Is a Map.") } else { alert("It's not a Map.") } } }
但实际运行后,总是弹出提示:
It's not a Map.
该如何解决这个问题?
解决方法
Firestore的JavaScript SDK读取Map类型字段时,默认会将其转换为普通的JavaScript对象(Object),而非原生Map实例,这就是instanceof Map判断返回false的原因。
你可以通过以下两种方式处理:
手动转换为Map实例:
利用Object.entries()将读取到的普通对象转为键值对数组,再传入Map构造函数生成Map实例:async function getJohn() { var ref = doc(db, "users/john"); const document = await getDoc(ref); if(document.exists()) { const mapObj = document.data().map; const map = new Map(Object.entries(mapObj)); if (map instanceof Map) { alert("Is a Map."); } else { alert("It's not a Map."); } } }直接操作普通对象:
如果不需要严格使用Map实例,也可以直接把读取到的对象当作普通JS对象使用,比如通过mapObj.key或mapObj['key']访问属性,遍历则用Object.keys()、Object.values()或Object.entries()方法。
内容的提问来源于stack exchange,提问作者Always Learner
相关产品推荐
相关产品推荐

