Javascript - 检索对象属性路径

IT技术 javascript
2021-02-25 15:12:56

我有以下对象

var obj = {};
obj.foo = {};
obj.foo.bar = "I want this";

给定“路径”"foo.bar"作为字符串,我如何检索obj.foo.bar(或obj[foo][bar])?

4个回答

这里有一个方法:

function getKey(key, obj) {
  return key.split('.').reduce(function(a,b){
    return a && a[b];
  }, obj);
}

getKey('foo.bar', obj); //=> "I want this"
@Tobo:尝试使用不存在的密钥,它应该undefined按原样返回
2021-04-21 15:12:56
好主意!只有一件事:如果“路径”中的一个属性未定义,这将引发 TypeError。我建议您通过更改return a[b]return a && a[b]. 这样在那种情况下 getKey 返回undefined,感觉更好
2021-04-30 15:12:56
哦,我看如果您连续输入两个不存在的内容,它会引发错误。已编辑。
2021-05-06 15:12:56

如果path = "foo.bar"那么你可以写

var keys = path.split('.');
console.log(obj[keys[0]][keys[1]]);

其他方式 :

function resolve(root, path){
    try {
        return (new Function(
            'root', 'return root.' + path + ';'
        ))(root);
    } catch (e) {}
}

resolve(obj, 'foo.bar'); // "I want this"

更多相关信息:https : //stackoverflow.com/a/18381564/1636522

new Function还在eval
2021-05-04 15:12:56
@elclanrs ...但不一定被滥用:)
2021-05-07 15:12:56
还在评价中。。。
2021-05-09 15:12:56
即使在这种情况下,它也是邪恶的。
2021-05-11 15:12:56

只需使用 obj.foo.bar..that 就行了;

这不是他要问的。他询问如何使用字符串“foo.bar”访问对象属性。
2021-05-17 15:12:56