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')
    

    更多用法可以参考这里

  • 相关阅读:
    外刊IT评论网
    9 More Mind-Blowing WebGL Demos
    主流开源许可协议比较(BSD,Apache,GPL,LGPL,MIT...)
    jsPlumb
    SharePoint Designer 2013 Workflow
    The Zip, GZip, BZip2 and Tar Implementation For .NET
    Config Sharepoint 2013 Workflow PowerShell Cmdlet
    iTextSharp
    模糊查询
    asp.net Cookie
  • 原文地址:https://www.cnblogs.com/YooHoeh/p/12098880.html
Copyright © 2011-2022 走看看