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], ...
随机推荐
- windows10版本1709 在桌面和文件中点击右键,会引起卡顿
windows自动升级到1709版本后出现的问题,而之前是没有这种问题的. 最终解决办法:(需要设置注册表) 运行:快捷键Win+R regedit 路径:可直接复制后粘贴+回车 HKEY_CLASS ...
- coursera普林斯顿算法课part1里Programming Assignment 2最后的extra challenge
先附上challenge要求: 博主最近在刷coursera普林斯顿大学算法课part1部分的作业,Programming Assignment2最后的这个extra challenge当初想了一段时 ...
- Linux上跑两个版本的php,5.4.45和5.3.24
首先,装的实在艰难,所以容我吐槽两句: PHP好个P,两个小版本都不兼容,把这个php5.3.24放在5.4.45环境下都跑不了.对于我这种用多了向下兼容的java的人来说,简直无法想象! 网上有装俩 ...
- 【并查集】HDU 1325 Is It A Tree?
推断是否为树 森林不是树 空树也是树 成环不是树 数据: 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 1 0 0 1 2 2 3 4 5 0 0 2 5 0 0 ans: no ...
- android UI布局
一.设置反复背景 在drawable目录下建一个mybackground.xml文件 在文件里写入: <?xml version="1.0" encoding="u ...
- android checkbox 未选中状态 已选中状态 替换成自己的图片
效果图: 未选中状态: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- Java加密与解密笔记(四) 高级应用
术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...
- java 对象的初始化过程
PersonDemo p=new PersonDemo("lisi",20);这句话都做了什么事情? 因为new用到了PersonDemo.class,所以会先找到PersonDe ...
- 【python】递归(阶乘、斐波纳契、汉诺塔)
- win10 下 学习 xe10 误以为调试失效
1. XE里面运行的有两个按扭,你点后面一个,就是debug 的了,前面一个是直接运行,不一样的!,被delphi7老思维导向错了 1)绿色箭头是直接运行,快捷键:ctrl+shfit+F9 2) ...