2013-02-03 35 views
0

我有一个函数,它像"obj.key.subkey.subsubkey"的字符串:替代EVAL多个属性查找

function(obj, key) { 
    return eval('obj.'+ key); 
} 

什么将eval一个安全的替代品在这种情况下,或者是eval罚款?在这种情况下,new Function不起作用。也许split然后循环?

+0

@Felix Kilng。没有看到那个,那就是我一直在寻找的东西。毕竟,我希望不得不这样做。循环它然后... – elclanrs

+0

我将它添加到我的最爱,因为我永远也找不到它;) –

回答

1

我不确定你真的需要在这里的功能。如果你有对象和键只是使用键来返回对象的属性。

obj[key] 

如果你必须处理多个密钥:

function get(obj, key) { 
    var keys = key.split("."); 
    var tmp = obj; 
    for (var x = 0; x < keys.length; x++){ 
    tmp = tmp[keys[x]]; 
    } 
    return tmp; 
} 

工作实例:http://jsfiddle.net/H55ka/

+0

谢谢,这个作品。 – elclanrs

+0

@elclanrs很高兴我能帮到你。 –

+0

我最终这样做了,但同样的想法,只是为了能够链接它:'return keys.map(function(k){return tmp = tmp [k];})。pop()' – elclanrs