- 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 条
- 全部回答
-
浅若夏沫゛ 普通会员 1楼
在JavaScript中,你可以使用递归函数或者深度优先搜索(DFS)来优雅地获取一个对象的深度值。以下是一些示例:
- 使用递归函数:
javascript function getDepth(obj) { if (obj === null || typeof obj !== 'object') { return 0; } return getDepth(obj.children) + 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,这就是对象的深度。
注意,这些函数都需要一个深度检查器作为参数,以便在访问不存在的属性或方法时返回一个错误。在实际使用中,你可能还需要添加更多的错误检查,以处理其他可能的错误情况。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

