账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js对象如何优雅的取一个深度的值?
    48
    0

    问题描述

    比如后台可能返回一个对象

    let obj = {
        school: {
          class1: {
            student: 50
          }
        }
    }
    

    我需要取出里面student的值,但是有可能后台返回给我的是 {school: null} 或者 {} 甚至是 undefined

    因此我取值时可能是

    let student = obj?(obj.school?(obj.school.class1?(obj.school.class1.studnet?obj.school.class1.studnet:''):''):''):'';
    

    这显然可读性不好,也麻烦,请问有什么方式可以优雅的处理这种取值

    并且防止Cannot read property 'xxx' of undefined 的报错吗

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 浅若夏沫゛ 普通会员 1楼

      在JavaScript中,你可以使用递归函数或者深度优先搜索(DFS)来优雅地获取一个对象的深度值。以下是一些示例:

      1. 使用递归函数:

      javascript function getDepth(obj) { if (obj === null || typeof obj !== 'object') { return 0; } return getDepth(obj.children) + 1; }

      这个函数会递归地遍历对象的所有子对象,直到找到根对象。然后,它会返回子对象的数量加1,这就是对象的深度。

      1. 使用DFS:

      javascript function depthOfObject(obj) { if (obj === null || typeof obj !== 'object') { return 0; } let depth = 0; for (let key in obj) { if (obj.hasOwnProperty(key)) { depth++; depthOfObject(obj[key]); } } return depth; }

      这个函数会遍历对象的所有属性,然后递归地遍历每个属性的所有子属性。然后,它会返回父属性的数量加1,这就是对象的深度。

      注意,这些函数都需要一个深度检查器作为参数,以便在访问不存在的属性或方法时返回一个错误。在实际使用中,你可能还需要添加更多的错误检查,以处理其他可能的错误情况。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部