今天在写代码的是否,碰到如下的数据,我要取值 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解构之复杂数据的更多相关文章

  1. ES6解构赋值

    前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...

  2. ES6解构赋值常见用法

    解构赋值出现的契机: let obj = { a: 1, b: 2 } // 取值 let a = obj.a let b = obj.b 问题核心: 每次取值既要确定对象属性名,还得重新定义一个变量 ...

  3. ES6解构赋值详解

    文章转载自:http://www.zhufengpeixun.cn/article/167 解构赋值(destructuring assignment)语法是一个 Javascript 表达式,这种语 ...

  4. ES6 解构

    { "code": 200, "msg": "success", "data": { "total" ...

  5. 利用es6解构赋值快速提取JSON数据;

    直接上代码 { let JSONData = { title:'abc', test:[ { nums:5, name:'jobs' }, { nums:11, name:'bill' } ] } l ...

  6. 简单看看es6解构赋值

    哎,我真的是太难了,今天就被这个解构赋值(也可以叫做析构,貌似析构是在c++中的,所以我这里叫做解构赋值吧)弄的我很烦,本来以为很容易的,结果还是弄了好久...就总结一下解构吧! 1.解构的基本使用 ...

  7. ES6 解构 destructuring

    解构的作用:简化书写长度,提升开发效率. 解构对象 在开发中我们常用到使用ajax请求数据,并且把数据渲染到页面上.可能这个数据返回的对象或数组.例如返回一个obj{name:'zwq',age:18 ...

  8. ES6 - 解构(数组和对象)

    解构对象 /** * 解构:快捷,方便 * * 对象解构 */ { var expense = { type: "es6", amount: "45" }; / ...

  9. ES6 解构赋值详解

    解构赋值是对赋值运算符的扩展,可以将属性/值从对象/数组中取出,赋值给其他变量. 一.数组的解构赋值 1.基本用法 只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [a, [[b], ...

随机推荐

  1. python 3.6 urllib库实现天气爬取、邮件定时给妹子发送天气

    #由于每天早上要和妹子说早安,于是做个定时任务,每天早上自动爬取天气,发送天气问好邮件##涉及模块:#(1)定时任务:windows的定时任务#             配置教程链接:http://b ...

  2. 》》QQ-注册

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. POJ2942 Knights of the Round Table 点双连通分量,逆图,奇圈

    题目链接: poj2942 题意: 有n个人,能够开多场圆桌会议 这n个人中,有m对人有仇视的关系,相互仇视的两人坐在相邻的位置 且每场圆桌会议的人数仅仅能为奇书 问有多少人不能參加 解题思路: 首先 ...

  4. 在dotnet core web api中支持CORS(跨域访问)

    最近在写的Office add-in开发系列中,其中有一个比较共性的问题就是在add-in的客户端脚本中访问远程服务时,要特别注意跨域访问的问题. 关于CORS的一些基本知识,请参考维基百科的说明:h ...

  5. Java加密与解密笔记(二) 对称加密

    前面的仅仅是做了编码或者摘要,下面看看真正的加密技术. DES public class DESUtil { static final String ALGORITHM = "DES&quo ...

  6. js复制链接

    需求:js复制一个并非当前页面的链接 实现: html <button class="btn btn-primary btn_copyurl">复制课程链接</b ...

  7. Android项目实战(三十九):Android集成Unity3D项目(图文详解)

    需求: Unity3D 一般用于做游戏 而且是跨平台的.原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作. ...

  8. 配置java项目的intellij idea的运行环境

    才疏学浅,只懂一点点前端的皮毛东西,对于项目运行环境的配置一无所知,今天简单记录一下! 前提:装好了jdk.maven.intellij idea. 1. file菜单->Open...打开从S ...

  9. 【python】BIF及查看函数帮助

    Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32 Type ...

  10. Spring MVC框架下的第一个Hello World程序

    本程序是一个maven程序,使用maven方便管理jar包和程序,简化了操作步骤.本程序的目的是通过一个简单的程序,了解Spring MVC框架的基本工作流程,由简入繁的学习Spring MVC框架, ...