假设我有这个:
var a = { A : { AA : 1 }, B : 2 };
Run Code Online (Sandbox Code Playgroud)
有没有办法让我创建一个可以让我引用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
Run Code Online (Sandbox Code Playgroud)
如果没有,有什么更好的方式来获得我想要的东西?
Kri*_*izz 29
不是直接的.
展平对象,以获得新对象var a = { 'A.AA' : 1; B : 2 };.
请参阅在JavaScript中压缩对象层次结构 或为mvc绑定展平复杂的json对象以获取它的javascript函数.
我可以看到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;
}
Run Code Online (Sandbox Code Playgroud)
var x = eval("a." + myRef); // x will be 1 for myRef == "A.AA", 2 for "B"
Run Code Online (Sandbox Code Playgroud)
请谨慎使用此解决方案,因为您可能会引入一些安全问题.更多的是好奇心.
小智 6
由于我也遇到了这个问题,因此我为此编写了一个单行实用程序(ES6):
const leaf = (obj, path) => (path.split('.').reduce((value,el) => value[el], obj))
Run Code Online (Sandbox Code Playgroud)
例:
const objSample = { owner: { name: 'Neo' } };
const pathSample = 'owner.name';
leaf(objSample, pathSample) //'Neo'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11135 次 |
| 最近记录: |