使用嵌套JavaScript对象的变量

假设我有这个:

var a = { A : { AA : 1 }, B : 2 };

有没有办法创建一个可以让我参考AA或B的变量?语法会是什么样子?

// I know I can do this:    
a['B']; // 2
a['A']['AA']; // 1

// something like this?
var myRef = ???;
a[myRef]; 1 or 2 depending on myRef

如果没有,什么是更好的方式来获得我要去这里?

最佳答案
不直接

解决方案1 ​​ – 使用对象平坦化

平铺对象,具有新对象var a = {‘A.AA’:1; B:2};

compressing object hierarchies in JavaScript
Flattening a complex json object for mvc binding获取它的JavaScript功能.

Soution 2 – 写入密钥路径访问器

我可以看到它已经被Eugen处理了.
转载代码审查版本:

function Leaf(obj,path) {
  path=path.split('.');
  var res=obj;
  for (var i=0;i<path.length;i++) res=res[path[i]];
  return res;
}

解决方案3 – 使用eval

var x = eval("a." + myRef); // x will be 1 for myRef == "A.AA", 2 for "B"

请注意此解决方案,因为您可能会引入一些安全问题.这更是好奇心.

转载注明原文:使用嵌套JavaScript对象的变量 - 代码日志