HarmonyOS 鸿蒙Next关于 Map和Record如何使用

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next关于 Map和Record如何使用

## Map 类型 例如: 

let obj = new Map<string,Object>(); obj[‘aaa’] = ‘bbb’;

obj[‘ccc’] = ‘123456’; let jsonStr = JSON.stringify(obj) <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

这样写法是可以将 obj 对象 通过 JSON 转成 json字符串,但是官方文档很少看到这样写法,这样更偏向js的方式,是否已经被淘汰的语法  其次,如果采用 map.set 方式,则无法通过 JSON 来转化

obj.set(‘name’, ‘34567’); obj.set(‘age’, ‘12345’);<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

这样 无法将设置进去的 key-value 通过 JSON 转出来   问题:正对第一种写法是否准确,是否符合鸿蒙应用开发规范,第二 Map 对象有没有官方说明文档, 并未找到Map的介绍.   ## Record 类型 Recrod 类型有没有相关文档说明,发现在例子中大量使用到,这个其实也是键值对的对象,这个和Map 有什么区别?目前能知道是无法通过 new出一个对象,但是下列使用是否符合规范 

let rcd = { ‘a’:1, ‘b’:‘123456’ } as Record<string, Object>;  rcd[‘ddd’] = ‘test’ // 是否可以这样新增加一个 key-value  let jsonText = JSON.stringify(rcd)  <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>


更多关于HarmonyOS 鸿蒙Next关于 Map和Record如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
Map 类型第一种写法,后续会被摒弃,建议用第二种写法,第二种 map.set 方式,无法直接通过 JSON 来转化,需要用Record 进行中转,

可参考以下demo:

 let info:Map<string, Object> = new Map<string, Object>()

    info.set(“userType”, 1)

    info.set(“smesisUserId”, ‘userInfo.userInfo.smeUserId’)

    info.set(“originUrl”, ‘555’)

    info.set(“userId”, ‘dfgerg’)

    let jsonString = ‘’

    try {

      let jsonObject:Record<string,Object> = {};

      info.forEach((value,key) => {

        if (key != undefined && value != undefined) {

          jsonObject[key] = value;

        }

      })

      jsonString = JSON.stringify(jsonObject);

      console.debug(<span class="hljs-built_in">JSON</span>字符串:${jsonString})

    } catch (e) {

      console.debug(‘err’)

    }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

Record遵循TS中的语义,没有变化;  

Record不是数据结构(没有方法、属性),是TS中的一个类型  

可参考文档(对象字面量章节中的Record类型的对象字面量):  

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/introduction-to-arkts-V13

更多关于HarmonyOS 鸿蒙Next关于 Map和Record如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,Map和Record的使用是基于JavaScript标准的扩展,特别是在鸿蒙应用开发中,它们有特定的使用方法和注意事项。

对于Map,你可以使用new Map()构造函数创建一个Map对象,并通过set方法为其设置键值对。一旦设置了值,必须使用get方法来检索。Map对象支持多种遍历方式,取决于你是如何赋值的。对于通过set方法赋值的Map,推荐使用forEach来进行遍历;如果Map是通过索引或其他方式赋值的,则可能需要使用其他遍历方法。

至于Record,在HarmonyOS的上下文中,它并不是一个直接对应的类型或概念。如果你在鸿蒙应用开发中需要处理类似Record的结构,可以考虑使用对象(Object)或Map来模拟。对象在JavaScript中本质上就是键值对的集合,可以很方便地用来存储和访问数据。

如果在具体使用过程中遇到问题,建议查阅HarmonyOS的官方文档或示例代码,以获得更详细和准确的信息。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部