0

让我有下一个对象

   var o = { "foo" : {"bar" : "omg"} };  

我可以foo使用

o["foo"] // return {"bar" : "omg"} 

我可以使用 bar里面的键值foo

o["foo"]["bar"]  // return "omg"   

我可以一次使用括号获得键的barfoo[]
喜欢的东西

o["foo.bar"] // not working(

或者

o["foo/bar"] // not working(
4

5 回答 5

3

创建一个 getter 函数来做这样的事情是相当普遍的。来自评论:

我有对象 o 和字符串 'foo.bar',我想得到“omg”。

var getProp = function (theObject, propString) {
    var current = theObject;
    var split = propString.split('.');

    for (var i = 0; i < split.length; i++) {
        if (current.hasOwnProperty(split[i])) {
            current = current[split[i]];
        }
    }

    return current;
};

http://jsfiddle.net/MXu2M/

注意:这是一个综合示例,您需要在将其放到您的网站之前进行防弹和增强。

于 2012-09-13T13:21:58.550 回答
0

有一种方法,但我不确定这是你要求的:

eval("o.foo.bar");

虽然它很危险,并且不使用[],但是如果您想要使用字符串来访问它可以工作的任何对象

于 2012-09-13T13:13:29.210 回答
0

不幸的是,您只能使用o["foo"]["bar"]o.foo.bar

于 2012-09-13T12:42:17.917 回答
0

不,您必须使用o["foo"]["bar"],因为它是另一个对象中的一个对象。如果你想用“foo.bar”访问它,这意味着你必须像这样创建第一个对象:

var o = {"foo.bar": "omg"}
于 2012-09-13T12:43:09.133 回答
0

o["foo.bar"]o["foo/bar"]对您的示例无效。您可以使用这种更简洁的表示法:

var bar = o.foo.bar // bar will contain 'omg'
于 2012-09-13T12:45:19.273 回答