Zilliqa智能合约mapping读取时console.log输出undefined问题求助
问题原因与解决方案
这个问题有两个常见的触发原因,对应解决方法如下:
原因1:返回的users_map不是普通JS对象,是ES6 Map实例
zilliqa.js的getSmartContractState接口返回的合约映射类型字段,默认会封装为ES6 Map结构,不能直接用普通对象的[]语法取值。
解决方法:调用Map的get方法取值即可
let username = users_map.get(getAddress)
原因2:地址大小写不匹配
Zilliqa支持校验和格式的地址(大小写混合),JS对象/Map的键都是大小写敏感的,如果你输入的getAddress和映射中存储的地址大小写不一致,就会匹配失败返回undefined。
解决方法:统一将地址转为全小写(或全大写)后再匹配:
// 如果是普通对象的情况 const normalizedUsers = Object.fromEntries( Object.entries(users_map).map(([addr, name]) => [addr.toLowerCase(), name]) ) let username = normalizedUsers[getAddress.toLowerCase()] // 如果是Map的情况 let username = users_map.get(getAddress.toLowerCase())
你可以先执行console.log(users_map instanceof Map)确认类型,再选择对应方案即可。
内容的提问来源于stack exchange,提问作者Naveen Kumar
相关产品推荐
相关产品推荐

