vue动态变量名取值问题

  • 测试代码
let variable={
  form:{
    a:1,
    b:2
  }
};
let x="form.a";
console.log('res=',variable[x]);//A
console.log('res=',variable.form.a);//B

我定义veriable是全局变量,x是动态变量名,我想动态获取某个变量的值
用方法A获取不到(因为解析出来的是variable[form.a])
用方案B能获取到,但要写算法把字符串转换成B的形式很麻烦,有没有好的方法

阅读 8.8k
2 个回答

都是理想状态不用处理边界问题的话,一行代码就行读到了

console.log('res=', x.split('.').reduce((v, k) => v[k], variable));

真全局变量 你用let定义的不算 也能用eval

var variable = {
  form: {
    a: 1,
    b: 2,
  },
};
let x = 'form.a';
console.log('res=', eval(`(variable.${x})`));

当然不是真全局变量eval也行

console.log('res=', eval(`(${JSON.stringify(variable)}.${x})`));

声明一下以上代码能工作但都不是好办法,最好的办法是封装个函数,或现成的库,比如lodash_.get(object, path, [defaultValue])

因为方法A 应该是 variable['form']['a'],你应该根据层级去动态获取数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题