Javascript嵌套对象查找,从字符串,不带eval?

Javascript嵌套对象查找,从字符串,不带eval?,javascript,jquery,Javascript,Jquery,有一种情况,从外部源向我提供了一条路径,我需要从对象中提取该键并返回值 文档模式在设计时也是未知的,因此这必须是完全灵活的 eval()做我想做的,但我正在尽职调查,看看是否还有其他方法 var obj = {"a": {"b": {"c": 42}, "d": [8,9]}} var path = 'a.b.c'; eval('obj.' + path); 42 有没有人知道一种不用“eval”的方法,我可以使用字符串“a.b.c”在obj中查找嵌套值 这还必须支持列表中的索引: var p

有一种情况,从外部源向我提供了一条路径,我需要从对象中提取该键并返回值

文档模式在设计时也是未知的,因此这必须是完全灵活的

eval()做我想做的,但我正在尽职调查,看看是否还有其他方法

var obj = {"a": {"b": {"c": 42}, "d": [8,9]}}
var path = 'a.b.c';
eval('obj.' + path);
42
有没有人知道一种不用“eval”的方法,我可以使用字符串“a.b.c”在obj中查找嵌套值

这还必须支持列表中的索引:

var path = 'a.d[1]';
eval('obj.' + path);
9
我可以使用jQuery,如果它提供了一个可行的解决方案,我只是看不到任何明显的东西


谢谢

这里的解决方案是递归

function getVal(path, obj){
    if(path.length === 1){
        return obj[path[0]];
    }
    else{
        return getVal(path, obj[path.shift()]);
    }
}

var obj = {"a": {"b": {"c": 42}, "d": [8,9]}};
var path = 'a.b.c';

var val = getVal(path.split('.'), obj);
console.log(val);
这将为您提供
42
。它还不能与
'a.d[1]
一起使用,但可以添加到中

更新:这里有一个适用于
'a.d[1]
的更新版本:

function getVal(path, obj){
    // Get the next "key" in the stack
    var key = path.shift();

    // Check for bracket notation
    if(key.indexOf('[') > -1){
        var match = key.match(/(\w+)\[(\d+)\]/);
        if(match !== null){
            // Get the "next" key
            key = match[2];
            obj = obj[match[1]];
        }
    }

    // Return the value if done, otherwise, keep going
    return path.length === 0 ? obj[key] : getVal(path, obj[key]);
}

var obj = {"a": {"b": {"c": 42}, "d": [8,9]}};
var path = 'a.d[1]';

var val = getVal(path.split('.'), obj);
console.log(val);

嗯,是的,很简单。解析路径,然后使用括号表示法访问属性。@JonathanLonowski:我喜欢
对象。通过问题中的字符串
函数:-)谢谢大家!我不知道我怎么会错过另一个类似的问题,但其中一个答案,再加上下面@RocketHazmat的答案,让我得到了我所需要的。