【问题标题】:Check if a method exists from an object nested using lodash检查使用 lodash 嵌套的对象中是否存在方法
【发布时间】:2018-12-06 20:39:35
【问题描述】:

例如,

检查isCourage()方法是否存在于此类对象中。

puppy {

  ...

  goldenRetriever {

     ...

     hasCourage(){ ... }

  }

}

Lodash 可以解决问题,但我不确定我应该使用哪种方法。

【问题讨论】:

    标签: javascript json object data-structures lodash


    【解决方案1】:

    使用 lodash,您有一些可能对您有帮助的功能:

    您可以将_.isFunction_.get 一起使用:

    let obj = {
      foo:{
        bar:{
          fooBar: function(b) { return b }
        }
      }
    }
    
    console.log(_.isFunction(_.get(obj,'foo.bar.fooBar')))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

    您也可以使用_.result 来立即获取值,并使用not care 来确定它是否是一个函数。 _.result 会沿着路径执行任何函数并返回最终值:

    let obj = {
      foo:{
        bar:{
          fooBar: function(b='yay') { return b }
        }
      }
    }
    
    console.log(_.result(obj, 'foo.bar.fooBar'))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

    【讨论】:

    • 哦,很简洁优雅
    【解决方案2】:

    你可以使用

    _.get(puppy,'bar.goldenRetrieve.foo.hasCorauge.constructor') === Function
    

    (bar 和 foo 是示例,因为 ... 会令人困惑,如果是函数,.contructor 应该返回 Function...)

    let obj = {
      foo:{
        bar:{
          myFn:function(b){return b;}
        }
      }
    }
    
    console.log(_.get(obj,'foo.bar.myFn.constructor')===Function);
    console.log(_.get(obj,'foo.bar.myFn2.constructor')===Function);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

    【讨论】:

    • lodash 喜欢你的回答太棒了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2021-12-23
    • 2014-09-30
    • 2019-12-31
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多