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

能否通过字符串路径动态引用嵌套对象数组属性并赋值?

问题:能否通过字符串路径给对象/数组赋值?

现有代码

定义的数组:

var object_ = [
  {
      "name":"Akshay"
  }
];

定义的路径字符串:

var object_keys = "[0]['other_data']";

已知的正确赋值方式:

object_[0]['other_data'] = {
  "age":20,
  "Sex": "male"
}

疑问

能否通过以下方式实现相同的赋值操作?

object_[object_keys] = {
  "age":20,
  "Sex": "male"
}

回答

直接这么写不行。因为object_keys是字符串"[0]['other_data']",JavaScript会把它当成数组的一个普通属性名执行,最终会给object_新增一个名为"[0]['other_data']"的属性,完全达不到修改数组第0项的other_data的目的。

如果想通过这种字符串路径实现赋值,有两种可行方案:

  1. 使用eval(不推荐)
    eval可以直接解析并执行字符串中的代码,能实现需求,但如果路径字符串来自用户输入等不可信来源,会有严重的安全风险:
eval(`object_${object_keys} = { "age":20, "Sex": "male" }`);
  1. 手动解析路径(更安全)
    自己写个函数解析路径字符串,逐层访问对象/数组后完成赋值:
function setValue(obj, pathStr, value) {
  // 提取路径中的索引和属性名
  const pathSegments = pathStr.match(/\d+|'([^']+)'/g).map(segment => {
    if (segment.startsWith("'")) {
      return segment.slice(1, -1); // 去掉属性名的单引号
    }
    return parseInt(segment, 10); // 把索引转为数字
  });

  let currentObj = obj;
  // 遍历路径到倒数第二层
  for (let i = 0; i < pathSegments.length - 1; i++) {
    currentObj = currentObj[pathSegments[i]];
    if (!currentObj) {
      throw new Error("路径对应的层级不存在");
    }
  }
  // 给最后一层赋值
  currentObj[pathSegments[pathSegments.length - 1]] = value;
}

// 调用函数实现赋值
setValue(object_, object_keys, { "age":20, "Sex": "male" });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:39:18