|
|
||
|---|---|---|
| .. | ||
| docs | ||
| lib | ||
| package.json | ||
| README.md | ||
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
nullorundefined, 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
nullorundefinedare coerced toobjects.var obj = { 'a': 'b' }; var bool = deepHasProp( obj, 'a.length' ); // returns true -
Key path
arrayelements 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;
var has;
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:
has = deepHasProp.factory( 'a_b_c', {
'sep': '_'
});
bool = has( { 'a': { 'b': { 'c': 'd' } } } );
// returns true
bool = has( { 'a': [ { 'b': { 'c': 'd' } } ] } );
// returns false