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

如何在JavaScript中通过字符串动态访问对象属性?

如何通过字符串路径动态访问对象属性?

当然可以实现。你目前的代码里直接用obj[0].structure是行不通的,因为structure是字符串,JavaScript会把它当成对象的属性名来访问,而不是解析成嵌套路径。下面是几种可靠的实现方式:

方法一:拆分路径片段遍历访问(推荐,安全且兼容性好)

写一个通用工具函数,把路径字符串按.分割成片段,然后逐层遍历对象的属性:

// 通用函数:根据路径字符串获取对象嵌套属性
function getNestedProperty(obj, path) {
  const pathSegments = path.split('.');
  let currentValue = obj;
  
  for (const segment of pathSegments) {
    // 如果当前层级不存在,直接返回undefined避免报错
    if (!currentValue) return undefined;
    currentValue = currentValue[segment];
  }
  
  return currentValue;
}

// 修改你的fun1函数
function fun1(structure) {
  const obj = [{"header":{"orderNumber": "a", "item": 1}}, {"header":{"orderNumber": "b", "item": 1}}];
  const newObj = getNestedProperty(obj[0], structure);
  console.log(newObj);
}

// 调用示例
function fun2() {
  const structure = 'header.orderNumber';
  fun1(structure);
}

function fun3() {
  const structure = 'header.item';
  fun1(structure);
}

fun2(); // 输出 "a"
fun3(); // 输出 1

方法二:使用eval(仅适用于可信路径)

如果能保证路径字符串来自完全可信的来源,也可以用eval直接解析,但要注意eval存在安全风险,绝对不可用于处理用户输入等不可信内容:

function getNestedPropertyWithEval(obj, path) {
  try {
    return eval(`obj.${path}`);
  } catch (error) {
    return undefined;
  }
}

// 使用方式和方法一一致
const value = getNestedPropertyWithEval(obj[0], 'header.item');

额外说明

  • 原示例代码存在几个语法问题:obj未用const/let声明(会变成全局变量)、第二个fun2定义重复且语法错误,上面的代码已经修正了这些问题。
  • 如果路径中包含数组下标(比如header.items[0].name),可以修改拆分逻辑,先把下标转换成.分割的形式(比如header.items.0.name)再遍历,或者在循环中判断并处理下标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:30:54