Object has-property-deep check in JavaScript

后端 未结 8 2044
走了就别回头了
走了就别回头了 2020-12-01 21:16

Let\'s say we have this JavaScript object:

var object = {
   innerObject:{
       deepObject:{
           value:\'Here am I\'
       }
   }
};
<
8条回答
  •  情深已故
    2020-12-01 21:42

    I have created a very simple function for this using the recursive and happy flow coding strategy. It is also nice to add it to the Object.prototype (with enumerate:false!!) in order to have it available for all objects.

    function objectHasOwnNestedProperty(obj, keys)
    {
      if (!obj || typeof obj !== 'object')
      {
        return false;
      }
    
      if(typeof keys === 'string')
      {
        keys = keys.split('.');
      }
    
      if(!Array.isArray(keys))
      {
        return false;
      }
    
      if(keys.length == 0)
      {
        return Object.keys(obj).length > 0;
      }
    
      var first_key = keys.shift();
    
      if(!obj.hasOwnProperty(first_key))
      {
        return false;
      }
    
      if(keys.length == 0)
      {
        return true;
      }
    
      return objectHasOwnNestedProperty(obj[first_key],keys);
    }
    

    Object.defineProperty(Object.prototype, 'hasOwnNestedProperty',
    {
        value: function () { return objectHasOwnNestedProperty(this, ...arguments); },
        enumerable: false
    });
    

提交回复
热议问题