Проверьте, существует ли метод из объекта, вложенного с помощью lodash - PullRequest
0 голосов
/ 06 декабря 2018

Например,

проверить, существует ли метод isCourage() в таком объекте.

puppy {

  ...

  goldenRetriever {

     ...

     hasCourage(){ ... }

  }

}

Lodash может сделать трюк, но я не уверен, какой метод мне использовать.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

С 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>
0 голосов
/ 06 декабря 2018

Вы можете использовать

_.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>
...