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

如何存储对象路径?将对象路径存入变量失败求助

解决嵌套对象路径访问的问题

我来帮你捋清楚问题出在哪,以及怎么解决~

首先看你写的这段代码:

var object = {"india": { "chennai" : {"sholing":"hi"}}};
var path = ['india']['chennai']['sholing'];
console.log( object.india.chennai ); //works
console.log( object[path] ); //not works

为什么原来的写法不行?

你以为['india']['chennai']['sholing']是把对象的路径存成变量,但实际上这行代码的逻辑完全不是这么回事:

  1. 先创建了一个仅包含'india'的数组
  2. 接着尝试访问这个数组的chennai属性——数组本身根本没有这个属性,所以得到undefined
  3. 最后再访问undefined的sholing属性,结果还是undefined

所以最后path的值是undefined,用object[undefined]自然取不到你想要的嵌套属性啦。

正确的实现方式

我们需要把路径存成字符串数组,然后通过遍历数组来逐层访问对象的嵌套属性,给你两种常用方案:

方案1:用数组存储路径 + reduce遍历

var object = {"india": { "chennai" : {"sholing":"hi"}}};
// 把路径拆成字符串数组
const path = ['india', 'chennai', 'sholing'];

// 写一个工具函数来逐层获取嵌套值
function getNestedProperty(obj, pathArr) {
  // 用reduce遍历路径,?.是可选链操作符,避免路径不存在时报错
  return pathArr.reduce((currentObj, key) => currentObj?.[key], obj);
}

console.log(getNestedProperty(object, path)); // 输出: hi
// 如果只想访问到chennai层,就取数组的前两项
console.log(getNestedProperty(object, ['india', 'chennai'])); // 输出: { sholing: 'hi' }

方案2:用点分隔的字符串路径(可选)

如果你习惯用"india.chennai.sholing"这种字符串形式的路径,可以先把它转成数组再用上面的函数:

var object = {"india": { "chennai" : {"sholing":"hi"}}};
const pathStr = 'india.chennai.sholing';
const pathArr = pathStr.split('.');

console.log(getNestedProperty(object, pathArr)); // 输出: hi

额外提醒

尽量不要用eval()来实现这个需求,虽然eval(object.${pathStr})看起来能行,但eval会执行任意代码,存在安全风险,尤其是当路径来自用户输入的时候,绝对不要用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:18