首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中访问可能的嵌套属性?

在javascript中访问可能的嵌套属性?
EN

Stack Overflow用户
提问于 2013-05-11 18:39:08
回答 1查看 99关注 0票数 3
代码语言:javascript
复制
var foo = function(o) {...

参数o可以为空,也可以包含或不包含某些嵌套对象。

我想找出o.foo.bar.baz.chomp.mumble的值。如果任何mumble或其包含的对象为null,我希望获取null。

我可以做到这一点(在这种情况下,我可以假设所有的path元素要么是对象,要么不存在--没有一个是非null、非对象):

代码语言:javascript
复制
var mumble = o && o.foo && o.foo.bar && o.foo.bar.baz 
   && o.foo.bar.baz.chomp ?  o.foo.bar.baz.chomp.mumble : null;

或者我可以这样做:

代码语言:javascript
复制
var mumble = null;
try { 
   mumble = o.foo.bar.baz.chomp.mumble;
} 
catch { //ignore null pointer exception}

或者我可以这样做:

代码语言:javascript
复制
var nestedVal = function( o, a ) { 

    if( isString( a ) ) {
        a = a.split( '.' );
    }
    var i = 0, j = a.length;
    for( ; o && isObject( o ) && i < j; ++i) { 
        o = o[ a[ i ] ];
    } 
    return i == j ? o : null;
};


var mumble = nestedValue(o, "foo.bar.baz.chomp.mumble");

哪一种更可取,或者有第四种更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2013-05-12 00:26:17

那得看情况!前两个解决方案修复了属性名称,这似乎限制过多。我倾向于选择您的最后一个解决方案,因为它是最灵活的。然而,我的实现如下:

代码语言:javascript
复制
var nestedVal = function (o, a) { 
    return a.split ('.').reduce (
      function (o, p) { 
        return o && p in o ? o[p] : null; 
      }, o);
};

在您的解决方案中,如果a不是字符串的行为似乎是任意的。您是否允许a作为属性名称的数组?我的解决方案要求参数a是一个字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16496227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档