HarmonyOS Next开发中arkts中如何把object对象转为map?
msgpack解析后的对象是object,如何将object转为map,因为ArkTS不允许使用TypeScript或JavaScript标准库中的大部分与动态特性有关接口,hasOwnProperty等不让使用,无法通过[]或者.获取object属性值:
function jsonStringToMap(jsonString: string): Map<string, any> { const obj = JSON.parse(jsonString); const map = new Map<string, any>(); for (const key in obj) { if (obj.hasOwnProperty(key)) { map.set(key, obj[key]); } } return map;}
还有其他办法吗?
使用 Object.entries() 和 Map 构造函数来转为map,亲测有效:
function jsonStringToMap(jsonString: string): Map<string, any> { const obj = JSON.parse(jsonString); return new Map(Object.entries(obj));}
在 HarmonyOS Next 开发中,如果你不能使用 TypeScript 或 JavaScript 的标准库,包括 hasOwnProperty
和通过 []
或 .
获取对象的属性值,那么你需要寻找其他方法来将对象转换为 Map
。
由于 ArkTS
对动态特性的限制,你可以考虑使用递归函数来遍历对象的属性,并将它们添加到 Map
中。下面是一个可能的实现:
function objectToMap(obj: any): Map<string, any> { const map = new Map<string, any>(); // 递归函数,用于遍历对象的属性 function traverse(obj: any, parentKey?: string) { for (const key in obj) { if (typeof obj[key] === 'object' && obj[key] !== null) { // 如果值是对象,则递归遍历 traverse(obj[key], parentKey ? `${parentKey}.${key}` : key); } else { // 如果值是基本类型,则添加到 Map 中 map.set(parentKey ? `${parentKey}.${key}` : key, obj[key]); } } } // 调用递归函数,开始遍历对象 traverse(obj); return map;}// 使用示例const obj = { name: 'John', age: 30, address: { city: 'New York', zipCode: '10001' }};const map = objectToMap(obj);console.log(map);
这个 objectToMap
函数使用了一个递归函数 traverse
来遍历对象的属性。如果属性的值是一个对象,它会递归地调用自己;如果属性的值是基本类型,它会将该属性及其值添加到 Map
中。这样,即使不能使用 hasOwnProperty
或通过 []
或 .
获取属性值,也能将对象转换为 Map
。
HarmonyOS Next开发中ArkTs是否支持AOP? 想类似于Android中实现切面编程,比如在方法前后增加日志,统计方法耗时等
HarmonyOS Next中如何在arkts中格式化时间戳? 比如将1611081385000格式化为:2021-01-20 02:36:25
HarmonyOS Arkts UIAbility组件有几种启动模式? UIAbility启动模式和Android Activity的启动模式有哪些区别?这些启动模式有哪些应用场景?
用ArkTs来加载web组件展示webview内容。有个问题,就是无法通过chrome的开发者工具中查看和修改网页代码。前端有时需要修改网页内容同时查看源码调试。如果想看和调试我应用中的网页源代码,应该怎么做呢?
HarmonyOS Next中NAPI方式交互的性能问题如何优化? 当C++原生线程需要调用TS方法时,需要使用缓存的Env,这个Env是主线程的,这时需要切换到主线程才可以调用TS方法,如果是特别频繁的交互,C++原生线程需要频繁切换到主线程去调用(长连接网络、实时音视频流处理)等,这种情况会有等待主线程的线程问题吗?该如何优化呢?
列表数据源不变的情况下如何强制刷新列表?主要是现在列表子布局的声明周期函数中执行特定逻辑