我发现这段代码(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:无法读取未定义的属性“名称”
答案 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"