zoukankan      html  css  js  c++  java
  • JS避免对象多层次获取时报错

    有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:

    var data = { a: { b: { c: 'ScriptOJ' } } }
    data.a.b.c // => scriptoj
    data.a.b.c.d // => 报错,代码停止执行
    console.log('ScriptOJ') // => 不会被执行
    

    可以封装一个 safeGet 函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回 undefined,例如:

    var data = { a: { b: { c: 'ScriptOJ' } } }
    safeGet(data, 'a.b.c') // => scriptoj
    safeGet(data, 'a.b.c.d') // => 返回 undefined
    safeGet(data, 'a.b.c.d.e.f.g') // => 返回 undefined
    console.log('ScriptOJ') // => 打印 ScriptOJ
    

    下面是实现方法

    const safeGet = (data, path) => {
     if(data== undefined) return undefined;
     
     const pathArr = path.split('.');
     let result = data;
     
     for(let i = 0; i < pathArr.length; i++) {
       if(result[pathArr[i]] == undefined) return undefined;
       result = result[pathArr[i]]; 
     }
     return result
    }
    

    2019年09月11日更新
    给大家介绍一个lodash函数

    import _from 'lodash';
    
    _.get(obj,'a.b.d')
    

    更多用法可以参考这里

  • 相关阅读:
    前端学习:html基础学习四
    前端学习:html基础学习三
    cogs 2691. Sumdiv
    cogs 421. HH的项链
    Bzoj 2038: [2009国家集训队]小Z的袜子(hose)
    【NOIP模拟赛】密码锁
    cogs1612. 大话西游
    cogs1583. [POJ3237]树的维护
    Bzoj 3343: 教主的魔法
    SPOJ375 Query on a tree
  • 原文地址:https://www.cnblogs.com/YooHoeh/p/12098880.html
Copyright © 2011-2022 走看看