如何将JavaScript字符串作为变量路径,实现对已有变量的动态访问
动态访问嵌套变量取值为undefined的解决方案
错误原因
window[字符串路径]的使用存在两处逻辑错误:- 只有挂载到全局
window对象上的顶层变量才能通过该方式访问,你的roles是函数入参或模块内变量,根本不会挂载到window上 - 方括号语法不支持自动解析点分隔的嵌套路径,
window['roles.operations.xxx']是查找名为roles.operations.xxx的全局变量,而非按路径嵌套访问属性
- 只有挂载到全局
roles.operations是数组类型,本身只有数字索引,没有document_type这类自定义字符串属性,就算路径访问逻辑正确也拿不到对应值
解决方案
你的核心需求是判断传入的path参数替换横杠为下划线后,对应的项是否存在于roles.operations数组中,对应实现如下:
export const createVariable = (roles, path) => { const replacePath = path.replace(/-/g,"_"); // 把数组项统一转成下划线格式后做匹配 const finalValue = roles.operations.find(item => item.replace(/-/g, '_') === replacePath); console.log(finalValue); }
如果后续需要通用的嵌套对象路径访问能力,可使用下面的工具函数实现:
// 通用嵌套属性解析函数,支持点分隔的路径字符串 const getNestedValue = (obj, path) => path.split('.').reduce((res, key) => res?.[key], obj) // 示例:如果后续你的operations改成对象结构:roles.operations = {document_type: 'xxx'} // 就可以这样调用:getNestedValue(roles, `operations.${replacePath}`)
内容的提问来源于stack exchange,提问作者DarkVader191919
相关产品推荐
相关产品推荐

