我正在尝试访问字符串"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"
如何实现这一目标?
答案 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'));