在javascript中将字符串转换为嵌套对象的属性

时间:2013-02-21 12:20:34

标签: javascript

我正在尝试访问字符串"key1.key2"作为对象的属性。 例如:

var obj = { key1 : {key2 : "value1", key3 : "value2"}};
var attr_string = "key1.key2";

变量attr_string是由"."连接的嵌套对象中的一串属性。它可以是"key1.key2.key3.key4..."

之类的任何深度

我希望像obj.attr_string这样的内容给出obj["key1"]["key2"]的值"value1"

如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

感谢@dfsq记住我使用eval

这是我期待的,一种评估对象字符串属性的简单方法。

var obj = { key1 : {key2 : "value1", key3 : "value2"}};
var attr_string = "key1.key2";

var result = eval("obj."+attr_string);

不需要将字符串与"."分开,然后将其放入循环中以获取值。 eval可以使用javascript代码语句评估任何字符串。

答案 1 :(得分:0)

var target = obj;
for (var part in attr_string.split("."))
  target = target[part];

答案 2 :(得分:0)

这就是你想要的吗?

var obj = { key1: { key2A: 'x', key2B: { key3: 'y' } } },
    attr_string = 'key1.key2B.key3',

    find = function ( obj, str ) {

        var index = 0,
            arr = str.split( '.' );

        if ( arr.length ) {
            while ( typeof obj === 'object' &&  arr[ index ] in obj ) {
                obj = obj[ arr[ index ] ];
                index++;
            }
        }

        return obj;

    };


find( obj, attr_string ); // Returns 'y'

答案 3 :(得分:0)

将@ John的答案修复为可重复使用的功能(我将自己使用)

function nested(obj, attrString){
    var path = attrString.split(".");
    for (var i in path){
        obj = obj[path[i]];
    }
    return obj;
}

// test it out...
x = {a:{b:{c:"happy days"}}};
console.log(nested(x, 'a'));
console.log(nested(x, 'a.b'));
console.log(nested(x, 'a.b.c'));