deepHasProp
Test whether an object contains a nested key path, either own or inherited.
Usage
var deepHasProp = require( '@stdlib/assert/deep-has-property' );
deepHasProp( value, path[, options] )
Returns a boolean
indicating if a value
has a specified path
, either own or inherited.
function Foo() {
return this;
}
Foo.prototype.b = {
'c': 'd'
};
var obj = { 'a': new Foo() };
var bool = deepHasProp( obj, 'a.b.c' );
// returns true
bool = deepHasProp( obj, 'a.b.c.d.e' );
// returns false
If a key path includes an array
, specify the numeric index.
var arr = [
{
'a': [
{
'b': [
{ 'c': 'd' },
{ 'e': 'f' }
]
}
]
}
];
var bool = deepHasProp( arr, '0.a.0.b.0.c' );
// returns true
bool = deepHasProp( arr, '0.a.1.b.0.c' );
// returns false
bool = deepHasProp( arr, '0.a.0.b.1.c' );
// returns false
The key path may be specified as either a delimited string
or a key array
.
var obj = { 'a': { 'b': { 'c': 'd' } } };
var bool = deepHasProp( obj, [ 'a', 'b', 'c' ] );
// returns true
The function accepts the following options
:
- sep: key path separator. Default:
'.'
.
By default, the function assumes .
separated key values. To specify an alternative separator, set the sep
option.
var obj = { 'a': { 'b': { 'c': 'd' } } };
var bool = deepHasProp( obj, 'a/b/c', {
'sep': '/'
});
// returns true
deepHasProp.factory( path[, options] )
Returns a function
which tests whether a value
contains a nested key path
, either own or inherited.
var has = deepHasProp.factory( 'a/b/c', {
'sep': '/'
});
has( value )
Returns a boolean
indicating whether a value
contains a nested key path
, either own or inherited.
var has = deepHasProp.factory( 'a.b.c' );
function Foo() {
return this;
}
Foo.prototype.b = {
'c': 'd'
};
var obj = { 'a': new Foo() };
var bool = has( obj );
// returns true
Notes
When provided
null
orundefined
, the function result is alwaysfalse
.var bool = deepHasProp( null, 'a.b.c' ); // returns false bool = deepHasProp( void 0, 'a.b.c' ); // returns false
Property values other than
null
orundefined
are coerced toobjects
.var obj = { 'a': 'b' }; var bool = deepHasProp( obj, 'a.length' ); // returns true
Key path
array
elements are coerced tostrings
.var obj = { 'null': false }; var bool = deepHasProp( obj, [ null ] ); // returns true obj = { '[object Object]': false }; bool = deepHasProp( obj, [ {} ] ); // returns true
Examples
var deepHasProp = require( '@stdlib/assert/deep-has-property' );
var bool = deepHasProp( { 'a': { 'b': { 'c': 'd' } } }, 'a.b.c' );
// returns true
bool = deepHasProp( { 'a': { 'b': { 'c': 'd' } } }, [ 'a', 'b', 'hasOwnProperty' ] );
// returns true
bool = deepHasProp( { 'a': { 'b': { 'c': 'd' } } }, 'a/b/c', {
'sep': '/'
});
// returns true
bool = deepHasProp( { 'a': { 'b': { 'c': 'd' } } }, 'a.b.c.d' );
// returns false
bool = deepHasProp( { 'a': [ { 'b': { 'c': 'd' } } ] }, [ 'a', '0', 'b', 'c', 'd' ] );
// returns false
bool = deepHasProp( { 'a': { 'b': { 'c': 'd' } } }, 'a/b/c/d/e', {
'sep': '/'
});
// returns false
// Create a customized function:
var has = deepHasProp.factory( 'a_b_c', {
'sep': '_'
});
bool = has( { 'a': { 'b': { 'c': 'd' } } } );
// returns true
bool = has( { 'a': [ { 'b': { 'c': 'd' } } ] } );
// returns false