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

如何通过字符串格式路径获取对象的嵌套属性值

通过字符串路径获取对象嵌套属性的实现方案

你之前写的'primary_role'.name逻辑错误:这行代码是在字符串字面量"primary_role"上读取name属性,和你定义的目标对象完全没有关联,自然无法拿到预期结果。
你贴的示例数据末尾多了一个多余的],实际使用时删除即可,修正后的测试数据如下:

const userData = {
    "id": "3eef1",
    "name": "Admin",
    "email": "email@example.com",
    "primary_role": {
        "id": "a37ad",
        "name": "Shani",
        "description": " Users",
        "created_at": 1652413392,
        "updated_at": 1652413392
    },
    "created_at": 1652413392,
    "updated_at": 1652413392,
    "roles": [],
    "profile": null,
    "companies": []
}

无循环/无遍历的实现方式

按照要求不使用循环、不使用reduce/forEach/map这类遍历函数的前提下,可以通过动态函数构造的方式实现任意深度的字符串路径取值:

function getByPath(obj, pathStr) {
  // 直接拼接属性访问逻辑,全程无循环、无遍历操作
  return new Function('obj', `return obj?.${pathStr}`)(obj)
}

调用示例

// 获取primary_role下的name属性
console.log(getByPath(userData, 'primary_role.name')) // 输出: Shani
// 获取primary_role下的id属性
console.log(getByPath(userData, 'primary_role.id')) // 输出: a37ad
// 获取第一层属性
console.log(getByPath(userData, 'email')) // 输出: email@example.com
// 读取不存在的属性不会抛出异常,返回undefined
console.log(getByPath(userData, 'profile.avatar.url')) // 输出: undefined

注意:该方案适用于常规业务场景,属性名以下划线、驼峰格式命名的场景都可直接使用。如果属性名本身包含.这类特殊字符,需要提前对路径做转义处理。

单层属性的简单写法

如果你只需要读取第一层属性,不需要嵌套访问,直接用JS原生的方括号动态属性语法即可,不需要额外封装函数:

// 读取第一层的primary_role属性
const primaryRole = userData['primary_role']
// 嵌套读取也可以直接串联方括号
const roleName = userData['primary_role']['name']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:06:28