我试图通过字符串(键)访问hello值 我没有定义。我没想法让它发挥作用。
var key = "a.b.c.0";
var test = {"a":{"b":{"c":["hello","world"]}}};
console.log(test[key]); // undefined
console.log(test["a.b.c.0"]); // undefined
console.log(test["a.b.c[0]"]); // undefined
console.log(test["a.b.c"]); // fail
console.log(test.a.b.c); // [ 'hello', 'world' ]
console.log(test.a.b.c[0]); // hello
答案 0 :(得分:3)
你可以做这样的事情,但不知道它会给你多远:
key.split('.').reduce(function(test, prop) {
return test[prop];
}, test);
<强>实施例强>
'a.b.c.0'.split('.').reduce(function(test, prop) {...
// => "hello"
'a.b.c'.split('.').reduce(function(test, prop) {...
// => ["hello", "world"]
答案 1 :(得分:0)
如果您愿意使用图书馆,我强烈建议您查看lodash。为此,您可以使用lodash的get方法https://lodash.com/docs#get
_.get(test, key);
或者如果您需要Access object child properties using a dot notation string
中的基本本机JS实现function getDescendantProp(obj, desc) {
var arr = desc.split(".");
while(arr.length && (obj = obj[arr.shift()]));
return obj;
}
console.log(getDescendantProp(test, key));
//-> hello
另一种可能的方式(我不推荐它但它应该工作)是使用eval()
var value = eval('test' + key)