You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将点表示法转为括号语法,程序化访问嵌套对象属性?

如何将点表示法的属性路径转换为括号语法访问嵌套对象属性

你需要实现一个函数,接收类似'person.fullName'的点分隔路径字符串,通过括号语法逐层访问嵌套对象的属性值。原代码里有两个明显问题:一是正则匹配.的时候没转义,.在正则里是通配符,会匹配任意字符;二是拆分路径后没有实际执行属性访问逻辑。

下面是修正后的实现,同时加入了属性不存在时的容错处理:

const data = { 
    firstName: 'Jane Doe',
    lastName: 'Doe',
    person:  {
      fullName: 'Jane Doe'
     }
}

function outputValue(path) {
 console.log('path passed:', path)
 // 用转义的点判断是否为嵌套路径
 const isNested = /\./.test(path)
 let value = data
 if (isNested) {
  const nestedPath = path.split('.')
  // 逐层遍历路径,用括号语法访问属性
  for (const key of nestedPath) {
    // 容错:如果当前层级无该属性,终止遍历并返回undefined
    if (!value || !(key in value)) {
      value = undefined
      break
    }
    value = value[key]
  }
 } else {
  // 非嵌套路径直接用括号访问
  value = data[path]
 }
 console.log('value:', value)
 console.log('--------------------------------')
}

outputValue('firstName')
outputValue('person.fullName')
outputValue('person.nonExistent') // 测试不存在的属性

TypeScript 版本优化

如果用TypeScript,可以给函数加上泛型和类型约束,让路径更安全(比如限制路径为对象的有效属性路径),同时完善类型提示:

type Path<T> = T extends object 
  ? { [K in keyof T]: `${K}` | `${K}.${Path<T[K]>}` }[keyof T]
  : never;

const data = { 
    firstName: 'Jane Doe',
    lastName: 'Doe',
    person:  {
      fullName: 'Jane Doe'
     }
} satisfies Record<string, any>;

function outputValue<T extends typeof data, P extends Path<T>>(path: P) {
 console.log('path passed:', path)
 let value: any = data
 const nestedPath = path.split('.')
 for (const key of nestedPath) {
    if (!value || !(key in value)) {
      value = undefined
      break
    }
    value = value[key]
 }
 console.log('value:', value)
 console.log('--------------------------------')
}

outputValue('firstName')
outputValue('person.fullName')
// outputValue('person.invalid') // TypeScript会报错,提示路径无效

核心逻辑说明

  • 用/\./正则判断路径是否包含嵌套层级,避免原代码中.匹配任意字符的问题
  • 将路径按.拆分成数组后,通过循环逐层用value[key](括号语法)访问对象属性
  • 加入容错判断,防止访问不存在的属性导致报错
  • TypeScript版本通过递归类型Path<T>生成对象的所有有效点分隔路径,提供编译时类型检查

内容的提问来源于stack exchange,提问作者uber_n00b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:33