ES6解构之复杂数据
今天在写代码的是否,碰到如下的数据,我要取值 fvkey,fn,url.
{
"dltype":,
"exem":,
"fl":Object{...},
"hs":,
"ip":"106.39.84.163",
"ls":,
"preview":,
"s":"o",
"sfl":{
"cnt":
},
"tm":,
"vl":{
"cnt":,
"vi":[
{
"br":,
"ch":,
"cl":{
"fc":,
"keyid":"u0024wqfpsh.2"
},
"ct":,
"drm":,
"dsb":,
"fmd5":"a9fd4f65a9d604a92169be8cdc499caf",
"fn":"u0024wqfpsh.mp4",
"fs":,
"fst":,
"fvkey":"B188B8BAE71DDED428B7781BA026D3343FC3D66A993811ECCC73A48A7CB07415A1DDD320DCA5FD2B581AECE53B07CD536CD553B7E6BC1CF4687B71A13B08ED3CF5198827C699D3895B2FAB93E86EE7A9507E41A26A804DC6",
"head":,
"hevc":,
"iflag":,
"level":,
"lnk":"u0024wqfpsh",
"logo":,
"mst":,
"pl":Array[],
"share":,
"sp":,
"st":,
"tail":,
"td":"195.2",
"ti":"Apink《FIVE》",
"type":,
"ul":{
"ui":[
{
"url":"http://106.38.183.14/music.qqvideo.tc.qq.com/",
"vt":,
"dtc":,
"dt":
},
Object{...},
Object{...}
]
},
"vh":,
"vid":"u0024wqfpsh",
"videotype":,
"vr":,
"vst":,
"vw":,
"wh":1.7666667,
"wl":{
"wi":[ ]
}
}
]
}
}
于是我毫不犹豫的写下如下的代码,这里的 this.mvinfo就是上面的数据,只不过这段代码是运行在vue程序里面,那么是会被监听的。
没错,代码能够正确运行,也没毛病,只是觉得有点晕。这个时候ES6的结构不是刚好能用上么。
if (this.mvinfo && this.mvinfo.vl && this.mvinfo.vl.vi && this.mvinfo.vl.vi.length > ) {
var vi = this.mvinfo.vl.vi[]
if (vi.fvkey && vi.fvkey && vi.ul.ui && vi.ul.ui.length > ) {
let fvkey = vi.fvkey
let fn = vi.fn
let bUrl = vi.ul.ui[].url
this.src = `${bUrl}${fn}?vkey=${fvkey}&br=121&platform=2&fmt=auto&level=0&sdtfrom=v3010&guid=d756e889e0148f3c2eea4f6724d7da9b`
}
}
重写代码如下, 是不是代码短很多,我可以理解是复杂数据的结构,的确又很精妙, 需要注意的就是
1. 对象数组的结构,取第一个对象应该是 [{p1}],
2. 结构重命名 url: bUrl
let { vl: { vi: [{ fvkey, fn, ul: { ui: [{ url: bUrl }] } }] } } = this.mvinfo || {}
if (fvkey && fn && bUrl) {
this.src = `${bUrl}${fn}?vkey=${fvkey}&br=&platform=&fmt=auto&level=&sdtfrom=v3010&guid=d756e889e0148f3c2eea4f6724d7da9b`
}
这就完了么,当然没有,如果vl就不存在的话,这段代码是会报错的,报错怎么办。try catch 喽,
再调整代码如下,
try {
let { vl: { vi: [{ fvkey, fn, ul: { ui: [{ url: bUrl }] } }] } } = this.mvinfo || {}
if (fvkey && fn && bUrl) {
this.src = `${bUrl}${fn}?vkey=${fvkey}&br=&platform=&fmt=auto&level=&sdtfrom=v3010&guid=d756e889e0148f3c2eea4f6724d7da9b`
}
} catch (err) {
alert(err)
}
是不是完美了,当然不是,错误有这么处理的么。
然后,我先就这样了。
ES6解构之复杂数据的更多相关文章
- ES6解构赋值
前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...
- ES6解构赋值常见用法
解构赋值出现的契机: let obj = { a: 1, b: 2 } // 取值 let a = obj.a let b = obj.b 问题核心: 每次取值既要确定对象属性名,还得重新定义一个变量 ...
- ES6解构赋值详解
文章转载自:http://www.zhufengpeixun.cn/article/167 解构赋值(destructuring assignment)语法是一个 Javascript 表达式,这种语 ...
- ES6 解构
{ "code": 200, "msg": "success", "data": { "total" ...
- 利用es6解构赋值快速提取JSON数据;
直接上代码 { let JSONData = { title:'abc', test:[ { nums:5, name:'jobs' }, { nums:11, name:'bill' } ] } l ...
- 简单看看es6解构赋值
哎,我真的是太难了,今天就被这个解构赋值(也可以叫做析构,貌似析构是在c++中的,所以我这里叫做解构赋值吧)弄的我很烦,本来以为很容易的,结果还是弄了好久...就总结一下解构吧! 1.解构的基本使用 ...
- ES6 解构 destructuring
解构的作用:简化书写长度,提升开发效率. 解构对象 在开发中我们常用到使用ajax请求数据,并且把数据渲染到页面上.可能这个数据返回的对象或数组.例如返回一个obj{name:'zwq',age:18 ...
- ES6 - 解构(数组和对象)
解构对象 /** * 解构:快捷,方便 * * 对象解构 */ { var expense = { type: "es6", amount: "45" }; / ...
- ES6 解构赋值详解
解构赋值是对赋值运算符的扩展,可以将属性/值从对象/数组中取出,赋值给其他变量. 一.数组的解构赋值 1.基本用法 只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [a, [[b], ...
随机推荐
- Sql Server 的服务器类型
Sql Server 提供了四种服务器类型: 如图所示 : 1, 数据库引擎 2, Analysis Services (分析服务 ) 3, Reporting Services (报告服务) ...
- javaWeb中URLEncoder.encode空格问题
近期开发一个在线坐席的功能.发现推送的消息中空格变成了+ .查询发现URLEncoder.encode的问题.曾经用的时候也没注意过,解决的方法网上是对URLEncoder.encode的之后的字符串 ...
- google C++编程风格指南之头文件的包括顺序
google C++编程风格对头文件的包括顺序作出例如以下指示: (1)为了加强可读性和避免隐含依赖,应使用以下的顺序:C标准库.C++标准库.其他库的头文件.你自己project的头文件.只是这里最 ...
- Property list types and their various representations
iOS下Property list能够存储的数据类型 Property list types and their various representations Abstract type XML ...
- 一行代码巧妙实现iOS返回button
一行代码巧妙实现iOS返回button: self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[ ...
- Bootstrap入门Demo——制作路径导航栏
今天在在群里聊天的时候看到一仅仅程序猿发了一张用Bootstrap做的界面.感觉挺好看.然后去官网看了下组件.发现都挺美丽的,然后看到了路径导航栏,刚好要做这个东西,然后就下了Bootstrap的源代 ...
- 模拟教室网络(跨VLAN,跨网段通讯)
要求: 1,跨VLAN,三个教室在不同的VLAN中,翻番至网络风暴 2,三个VLAN在三个不同的网段 3,设置访问控制列表,组织每个网段的前八个IP不可访问服务器 4,其他IP均可访问外网的服务器 操 ...
- 【quickhybrid】API多平台支撑的实现
前言 在框架规划时,就有提到过这个框架的一些常用功能需要支持H5环境下的调用,也就是需要实现API的多平台支撑 为什么要多平台支撑?核心仍然是复用代码,比如在微信下,在钉钉下,在quick容器下, 如 ...
- mysql+mybatis递归调用
递归调用的应用场景常常出现在多级嵌套的情况,比如树形的菜单.下面通过一个简单的例子来实现mysql+mybatis的递归. 数据模型 private Integer categoryId; priva ...
- css自动添加浏览器兼容前缀 autoprefixer设置
Autoprefixer设置: preferences>key Bindings-Users {"keys":["ctrl+alt+x"],"c ...