javascript - 如何优雅的取多级嵌套的对象值?
阿神
阿神 2017-04-11 12:56:45
[JavaScript讨论组]

有一个对象

a:{
    b:{
        c:{
        ....
        }
    }
}

要取值

let val = a.b.c.d.e.f;

必须判断前面几级是否存在,否则执行时会报错。所以一般要写成这样

if (a && a.b && a.b.c && a.b.c.d && a.b.c.e) {
    let val = a.b.c.d.e.f;
}

有无优雅的写法或node包可以解决?

阿神
阿神

闭关修行中......

全部回复(4)
天蓬老师

lodash的 get。

_.get(object, path, [defaultValue])

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'
怪我咯

说下个人看法。
首先超过3级(包括3级)的嵌套不应该太多,如果有,首先看看是不是设计上除了问题。其次,如果遇到了,那么

必须判断前面几级是否存在

这个是没有必要的,报错才是正常的,提醒你哪里写漏或写错,改掉就好了,即使是在插件或者框架中,也是对个别比较重要的参数进行验证,否则调用一方很难判断错误源。参数验证大多不会是这种地方(提示xxx是undeifed或者null,xxx() is not a function这种),一般的异常提示(error),旨在明确一个复杂逻辑或亦混淆逻辑的错误源。

高洛峰
if (a.b.c.d.e.f != undefined){
    // do something
}
巴扎黑

判断最后一级的数据是正确不就可以了么?

    //如果a.b.c.d.e存在的话,执行下面代码
    if (!!a.b.c.d.e){
        // do something
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号