使用字符串从对象(带数组)获取值

时间:2015-07-09 17:35:41

标签: javascript

我发现这段代码(https://stackoverflow.com/a/8817473/1778465)很好用,但是当我想从第1项的数组中获取值时,我得到undefined,我不确定我能做什么做以获取数组项目。有什么想法吗?

这是代码:

var obj = {
    foo: { bar: {animals: [{name: "Billy"},{name: "Bob"},{name: "Joe"}]}}
};

var deep_value = function(obj, path){
    for (var i=0, path=path.split('.'), len=path.length; i<len; i++){
        obj = obj[path[i]];
    };
    return obj;
};

console.log(deep_value(obj, 'foo.bar.animals[1].name'));  // Should show "Bob"

上面给出了以下错误:

  

未捕获的TypeError:无法读取未定义的属性“名称”

Fiddle Found Here

1 个答案:

答案 0 :(得分:2)

你快到了。此代码将为您提供所需内容:

console.log(deep_value(obj, 'foo.bar.animals.1.name'));  // Should show "Bob"

编辑:如果您仍想对数组使用[1]语法,则此处是替代版本(按.[]拆分路径:< / p>

var obj = {
    foo: { bar: {animals: [{name: "Billy"},{name: "Bob"},{name: "Joe"}]}}
};

var deep_value = function(obj, path){
    for (var i=0, path=path.split(/[\[\]\.]/), len=path.length; i<len; i++){
        if (path[i]){
            obj = obj[path[i]];
        }
    };
    return obj;
};

console.log(deep_value(obj, 'foo.bar.animals[1].name'));  // Should show "Bob"