zoukankan      html  css  js  c++  java
  • ES6解构之复杂数据

    今天在写代码的是否,碰到如下的数据,我要取值 fvkey,fn,url.

    {
        "dltype":1,
        "exem":0,
        "fl":Object{...},
        "hs":0,
        "ip":"106.39.84.163",
        "ls":0,
        "preview":195,
        "s":"o",
        "sfl":{
            "cnt":0
        },
        "tm":1498811725,
        "vl":{
            "cnt":1,
            "vi":[
                {
                    "br":121,
                    "ch":0,
                    "cl":{
                        "fc":0,
                        "keyid":"u0024wqfpsh.2"
                    },
                    "ct":21600,
                    "drm":0,
                    "dsb":0,
                    "fmd5":"a9fd4f65a9d604a92169be8cdc499caf",
                    "fn":"u0024wqfpsh.mp4",
                    "fs":24395227,
                    "fst":5,
                    "fvkey":"B188B8BAE71DDED428B7781BA026D3343FC3D66A993811ECCC73A48A7CB07415A1DDD320DCA5FD2B581AECE53B07CD536CD553B7E6BC1CF4687B71A13B08ED3CF5198827C699D3895B2FAB93E86EE7A9507E41A26A804DC6",
                    "head":0,
                    "hevc":0,
                    "iflag":0,
                    "level":0,
                    "lnk":"u0024wqfpsh",
                    "logo":1,
                    "mst":8,
                    "pl":Array[1],
                    "share":1,
                    "sp":0,
                    "st":2,
                    "tail":0,
                    "td":"195.2",
                    "ti":"Apink《FIVE》",
                    "type":3585,
                    "ul":{
                        "ui":[
                            {
                                "url":"http://106.38.183.14/music.qqvideo.tc.qq.com/",
                                "vt":210,
                                "dtc":0,
                                "dt":2
                            },
                            Object{...},
                            Object{...}
                        ]
                    },
                    "vh":480,
                    "vid":"u0024wqfpsh",
                    "videotype":22,
                    "vr":0,
                    "vst":2,
                    "vw":848,
                    "wh":1.7666667,
                    "wl":{
                        "wi":[
    
                        ]
                    }
                }
            ]
        }
    }

    于是我毫不犹豫的写下如下的代码,这里的 this.mvinfo就是上面的数据,只不过这段代码是运行在vue程序里面,那么是会被监听的。

    没错,代码能够正确运行,也没毛病,只是觉得有点晕。这个时候ES6的结构不是刚好能用上么。

            if (this.mvinfo && this.mvinfo.vl && this.mvinfo.vl.vi && this.mvinfo.vl.vi.length > 0) {
              var vi = this.mvinfo.vl.vi[0]
              if (vi.fvkey && vi.fvkey && vi.ul.ui && vi.ul.ui.length > 0) {
                let fvkey = vi.fvkey
                let fn = vi.fn
                let bUrl = vi.ul.ui[0].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=121&platform=2&fmt=auto&level=0&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=121&platform=2&fmt=auto&level=0&sdtfrom=v3010&guid=d756e889e0148f3c2eea4f6724d7da9b`
              }
            } catch (err) {
              alert(err)
            }

    是不是完美了,当然不是,错误有这么处理的么。

    然后,我先就这样了。

  • 相关阅读:
    由mysql数据库基础上的php程序实现单词的查询、删除、更改和查询
    hdu 4756 Install Air Conditioning
    textarea中限制输入字符长度(实用版)
    ACCESS数据库操作教程
    ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现(详细版)
    ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现
    ASP + ACCESS保存图片文件之实现
    VB将PDF流写入ACCESS数据库,通过AcroPDF控件读出PDF流之实现
    管理员登陆界面与数据库操作界面设计
    textarea中限制输入字符长度
  • 原文地址:https://www.cnblogs.com/cloud-/p/7099647.html
Copyright © 2011-2022 走看看