Javasctipt对象层级嵌套太深获取时报错

解决vue.js 数据渲染成功仍报错的问题 最近在做一个vue项目,用的是官方推荐的axios请求数据,数据结构是一级对象嵌套二级对象,发现一级对象数据渲染不报错,二级数据渲染报错。很是郁闷!data函数如下 export default { name: 'hello', data() { return { card:{} } } } 返回的数据如下: { "object":{ "subObject":"123", ... } } 报错的原因是在data函数return的card里没有二级对象.所以会报错; 解决办法是: export default { name: 'de 立即下载

对象层级嵌套太深获取时报错

例如

const o = {}
o.b.a.c
// Uncaught TypeError: Cannot read property 'a' of undefined
const d = {b: null }
d.b.a.c
// Uncaught TypeError: Cannot read property 'a' of null

实际业务中在vue的template中,获取后端返回的数据报错

 <div class="report-main-text">
    {{ reportData.examineResult.examineImpression }}
 </div>
解决方案

举例

const object = { a: [{ b: { c: 3 } }] };
const defaultValue = 'defaultValue'
const a = safeGet(object, ["a", "0", "b", "c"], defaultValue )
// val => 3
const b = safeGet(object, ["a", "0", "b", "c", "b"]);
// b=> defaultValue  并且 报错

通过遍历property数组,取相应的值,如果为空就返回错误信息并且采用默认值,如果遍历完整就取相应的值

// a: any
function isArray(a) {
  return Array.isArray(a);
}
function isEmpty(a) {
  return a == null || typeof a !== "object";
}
function throwErrorInfo(obj, state, properties, n) {
  const errorProperty = properties[n];
  const propertiesInfo = properties.join();
  console.error(
    `Cannot read property ${errorProperty} of ${state}`,
    obj,
    properties
  );
}
function safeGet(obj, properties, defaultValue) {
  let state = obj;
  function computeArrayProperties() {
	  for (let i = 0; i < properties.length; i++) {
	      const property = properties[i];
	      if (isEmpty(state)) {
	        throwErrorInfo(obj, state, properties, i);
	        return defaultValue;
	      } else {
	        state = state[property];
	      }
	  }
  }
  if (isArray(properties)) {
    computeArrayProperties()
  }
  return state;
}

利用递归实现,实际就是替换 state , n,逻辑调理清晰

function safeGetByIter(obj, properties, defaultValue = "") {
  const len = properties.length;
  const equal = (x, y) => x === y
  function iterFn(state, n) {
    if (equal(n, len)) {
      return state;
    } else if (isEmpty(state)) {
      throwErrorInfo(obj, state, properties, n);
      return defaultValue;
    } else {
      return iterFn(state[properties[n]], n + 1);
    }
  }
  if (isArray(properties)) {
    return iterFn(obj, 0);
  }
  return defaultValue
}

相关代码

延展

实际在lodash库中,就有相关的解决方案 _.get,文档链接

Mac M系列芯片用户必看:UTM虚拟机跑麒麟V10安装达梦DM8全流程避坑指南 本文为Mac M系列芯片用户提供了一份详尽的UTM虚拟机安装麒麟V10并部署达梦数据库DM8的实战指南。文章深入分析了在ARM架构下选择UTM而非其他虚拟化方案的原因,并详细拆解了从系统安装、SPICE工具配置、麒麟V10深度调优到DM8安装与避坑的全流程,重点解决了ARM环境下的兼容性与配置难题,帮助开发者高效搭建国产化开发测试环境。 阅读详情

相关推荐

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

Object 重识(一)

内容有点儿多,将分为两篇内容与大家分享。有的地方确实难以理解,可以多动手实现一下,看看效果。 一直听说有这么一句话,在JavaScript中,一切皆为对象。 经本人慎重研究之后发现,此言的确不虚。(这不废话么,虚不虚的还用你说。) 今天斗胆跟大家一起讨论一下JavaScript重的Object。了解Object背后的 – 生活 阅读间隙,还得多注意休息哟~ 1. 对象的创建 开始第一个小问题,看一下如何创建一个对象。创建对象有四(shi)种方式。以下几种方式都可创建一个对象,只不过创建之后的表现稍有不同。具

YancyCathy的博客 431

基于OpenAI Agents构建多智能体工作流:从原理到实战

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个智能体(Agent)的协作与交互,解决单一智能体难以处理的复杂任务。其核心原理在于将任务分解、分配与协调,每个智能体具备特定能力,通过通信机制实现信息共享与决策协同。在工程实践中,多智能体框架的价值在于提升任务处理效率、增强系统鲁棒性,并支持模块化开发。典型的应用场景包括自动化工作流编排、复杂问题求解以及人机协同交互。本文以OpenAI Agents SDK为例,深入探讨如何利用其提供的智能体(Agent)、会话(Ses

weixin_28725959的博客 603

TS如何解决属性在另一个类型中不存在的问题?

TS 在遇到以下这些条件语句时,会在语句的块级作用域内「收紧」变量的类型,这种类型推断的行为称作类型守卫 (Type Guard)。=、!==(这里列举常用的 4 种)类型守卫可以帮助我们在块级作用域中获得更为精确的变量类型这里就可以通过判断 animal 中是否存在 meow 属性,来确定变量是否为 Cat 类型的对象let call;// 鼠标放到 animal 上,可以看到类型被限定为 Cat } else {

拯救世界的光太郎 6518

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 564

Python 爬虫实战:爬取国家统计局公开数据

国家统计局作为权威的宏观经济数据发布机构,汇聚了人口、GDP、就业、产业经济等多维度的核心统计数据,是开展经济研究、政策分析、行业洞察的重要数据支撑。相较于商业数据平台,国家统计局的公开数据具备权威性、全面性和时效性等特点,但部分数据分散在不同栏目且缺乏结构化下载渠道。本文基于 Python 爬虫技术,系统讲解国家统计局公开数据的爬取方法,重点解决静态表格解析、分页数据抓取、数据结构化转换等问题,同时严格遵循政府网站数据使用规范,为科研、教学等场景提供合规的数据获取方案。本文以国家统计局官网(

2503_91057718的博客 1818

前端面试题之JavaScript篇

前端面试题之JavaScript篇一、数据类型1. JavaScript有哪些数据类型,它们的区别?2. 数据类型检测的方式有哪些3. 判断数组的方式有哪些4. null和undefined区别5. typeof null 的结果是什么,为什么?6. intanceof 操作符的实现原理及实现7. 为什么0.1+0.2 ! == 0.3,如何让其相等8. 如何获取安全的 undefined 值?9. typeof NaN 的结果是什么?10. isNaN 和 Number.isNaN 函数的区别?11. =

爱是与世界平行 8940

Python 爬虫实战:模拟登录网易云音乐(加密接口逆向与自动化登录实现)

网易云音乐作为国内主流的音乐流媒体平台,其丰富的音乐资源和个性化推荐算法吸引了大量用户。对于开发者而言,模拟登录网易云音乐并实现自动化操作,可以用于数据分析、歌单同步、歌词抓取等场景。然而,网易云音乐采用了多重加密机制和反爬策略,直接模拟登录存在较大挑战。

yansideyucsdn的博客 2590

解决Vue3的ts报错:类型“{}”上不存在属性“xxx”,三种方法彻底根治

网上找了各种原因,有让添加jsconfig.json文件的,有让新建一个项目的,有的直接放弃ts的,哈哈哈,真的是千奇百怪都有,好吧,我这里就也出一种方法,不要用vscode了,使用WebStorm,哈哈哈,可能让你也想不到吧,但是真的有效啊:请看效果,就不报错了,撒花。

5万+

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 153

高可用架构设计——多节点OpenClaw集群部署与负载均衡(2026企业级)

本文介绍了企业级OpenClaw高可用集群架构设计,重点阐述了多节点部署与负载均衡方案。架构采用分层设计,包括表现层、应用层、数据层和基础设施层,确保99.99%的可用性目标。详细配置了主节点、工作节点和存储节点规格,提供Kubernetes集群部署脚本示例,实现自动化的容器编排管理。通过硬件冗余、故障隔离和弹性扩展等可靠性原则,构建能够应对各种故障场景的稳定AI助手系统。

博客 421

完全掌握 Vue 中的 $set 方法

vue3中由于响应式实现原理发生了变化,所以不需要 $set 了,所以不做探究。一知半解,是我最讨厌的状态,今天就带着问题,再阅读一下对应的源码,了解问题的本质。今天在使用 $set 的时候,发现如果 被赋值的数据 层级较深会出现报错的情况。简单说明一下我遇到的问题,明确探究问题的目标。3.通过数组索引修改数据。上述的演示,源码查看的是。

lazy_tomato的博客 1万+

安卓App开发 篇三:Android SDK和API

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少模板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。hl=zh-cnhl=zh-cnWorkManager 是 Android Jetpack 的一部分,是用于持久性工作的推荐解决方案,适用于需要通过应用重启和系统重新启动来调度的工作,也是后台处理操作的主要推荐 API。立即执行:必须立即开始且很快完成的任务,可以加急,使用和Worker,通过对调用处理加急工作。

生活在别处 1282

js嵌套对象报错Uncaught TypeError: Cannot read property ‘name‘ of undefined at解决方法

js嵌套对象报错Uncaught TypeError: Cannot read property 'name' of undefined at解决方法

wangchaoqi1985的博客 599

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java request含嵌套_Java解析post请求复杂嵌套json数据

案例一:(两层嵌套)请求数据:ps:一个对象包含一个对象; 方式一:使用map代码段:@RestController@RequestMapping("test")public class testDemo {@PostMapping("demo")public void test(@RequestBody Map> mapMap){Mapdata = mapMap.get("data");S...

weixin_30533301的博客 1308

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JS避免对象多层次获取时报错

有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如: var data = { a: { b: { c: 'ScriptOJ' } } } data.a.b.c // => scriptoj data.a.b.c.d // => 报错,代码停止执行 console.log('ScriptOJ') // => 不会被执行 可以封装一个 safe...

YooHoeh的博客 2227

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JAVA代码实现多级树结构封装对象(2018-09-26补充)

我们经常在代码里会造一个树结构对象,以方便前端使用。以地区(区、镇、村)为例 后台一般对于树结构对象在数据库的结构是这样的: 主键ID 名字 父ID ID REGION_NAME PARENT_ID 121100 尼龙区 0 121100001 尼龙区钢丝镇 121100 121100001001 尼龙区钢丝镇螺丝村 121100001

凌大大的博客 2万+

java 嵌套太多_Java嵌套循环中容易出现的问题

现象总是加载数据的总集合大小为0,后来经过断点调试才发现原因:i 和 j 不能混淆for (int i =0; i < songsTypes.size(); i++){SongsType songsType = songsTypes.get(i);int mCurrentId = songsType.getId();MusicSortItem musicSortItem = new Musi...

weixin_36432451的博客 636

vue2数据嵌套过深,导致页面数据不刷新的问题

vue2数据嵌套过深,导致页面数据不刷新的问题

coding... 5159

vue里嵌套对象渲染报错的解决方法

在页面渲染时,我的数据是嵌套的对象,如下图: 页面运行时可以正常显示,可是可以看到控制台还是会报错,如下图: 最后发现只需在页面显示时加一个判断就不会再报错了,如下图: ...

sinat_41200024的博客 7189

ts语法定义对象类型引用报错

定义对象类型使用时报错

weixin_48244940的博客 3439

解决element-ui中,数据嵌套太深,表单验证拿不到值的问题

因为后台返回的数据层次结构太深,所以在双向绑定的时候没有一一定义,最后在做验证的时候发现,数据没有定义,直接通过我们的form表单,是拿不到数据的,也做不了验证,就只能整个页面重新规范开发,这里给出应对数据嵌套太深,表单验证拿不到值的解决方法 ...

oilpastell的博客 3884

element-ui中点击iframe下拉框不收起

项目场景: 在页面中存在多个下拉框选项和iframe,当点击有下拉框存在时,点击iframe区域不收起,点击iframe意外区域会收取 问题案例: 案例链接 点击页面中的下拉框组件,再点击红色iframe区域,下拉框不收起,点击红色以外的区域,下拉框收起。 @Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DAT

coderMozart的博客 1855
上一篇: element-ui中点击iframe下拉框不收起
下一篇: 前端组件化之组件是什么
coderMozart
博客等级 码龄10年 5粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值