首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key

【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key

原创
作者头像
用户11403658
发布2024-12-25 16:22:16
发布2024-12-25 16:22:16
45800
代码可运行
举报
运行总次数:0
代码可运行

关键词:嵌套对象、类型、递归、未知类型

目录

使用 Record 与 ESObject 定义未知对象类型

递归打印未知类型对象的key


在鸿蒙应用开发中,所有的数据都必须定义类型,且不存在 any 类型,那么我们当遇到 key 值可能随时变化的情况时,如何获取该 object 中每一个 key 对应的数据呢?

本期以如下 object 为例,下方对象报文可能会根据使用时间或服务商的变化,"153" 字段可能会变成 "278" 等未知字符串、"5G" 字段可能会变成 "4G",那么当 key 值不断变化的同时应如何获取 "isShow" 字段的 "Y" 值?

代码语言:javascript
代码运行次数:0
运行
复制
json 代码解读复制代码"cfg": {
  "153": {
    "5G": {
      "isShow": "Y"
    }
  }
}

使用 Record 与 ESObject 定义未知对象类型

在鸿蒙中,已经不支持索引签名的类型写法(如:[key: string]: string | number),所以需要使用提供的 Record 与 ESObject 类型,在复杂类型场景使用,所以我们可以直接嵌套定义如下类型即可。

代码语言:javascript
代码运行次数:0
运行
复制
typescript 代码解读复制代码type objType = Record<string, Record<string, Record<string, Record<string, string>>>>
let obj: objType = {
  "cfg": {
    "153": {
      "5G": {
        "isShow": "Y"
      }
    }
  }
}

注:其他明确 key 与 value 类型的场景不建议使用 Record 与 ESObject 类型,养成良好开发习惯,标注好对应数据类型。

递归打印未知类型对象的key

鸿蒙中不支持 for... in 形式的打印,所以对于该种复杂嵌套对象,我们可以自行编写简单的 for 循环,递归调用即可。

代码语言:javascript
代码运行次数:0
运行
复制
typescript 代码解读复制代码/**
 * 打印对象所有的 key
 * @param obj
 */
handleKey(obj: objType | string) {
  let keys = Object.keys(obj);
  for (let i = 0; i < keys.length; i++) {
    console.log("luvi > " + keys[i]);
    if (typeof obj[keys[i]] === "object") {
      this.handleKey(obj[keys[i]])
      continue
    }
    // 打印 isShow 最终值
    if (keys[i] === "isShow") {
      console.log("luvi > isShow最终值:" + obj[keys[i]]);
      break
    }
  }
}

// 调用
this.handleKey(obj)

输出结果:

​编辑

该篇文章为开发时临时记录,开发经验如上,若对 TS 基础类型写法存在疑惑可查看 TS 官方文档,Record 与 ESObject 类型为鸿蒙的 ArkTS 类型,详细用法可前往 HarmonyOS 开发者官网了解。

作者:深海的鲸同学luvi 链接:https://juejin.cn/post/7452028372069548058 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Record 与 ESObject 定义未知对象类型
  • 递归打印未知类型对象的key
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档