Skip to content

An utility function to check if any arbitrary object has any property on any deep level.

License

Notifications You must be signed in to change notification settings

aal89/has-deep-value

Repository files navigation

has-deep-value

Very small (only 179 bytes), lightweight, tested and dependency free utility function to (deeply) inspect Javascript objects. With has-deep-value you can easily check if any object contains a given property at any level deep, accounts for falsey values too. Also includes a curried version and supports object path (dot notation) to keep api usage clear.

Install

$ npm install --save has-deep-value

Usage

Note: use .hasDeepValue for the normal function and .has for the curried version

const hasDeepValue = require('has-deep-value').hasDeepValue;
 
hasDeepValue({ hello: 'world' }, 'hello'); //-> true

Accounts for all values, including all falsey values, e.g.:

  • ''
  • false
  • NaN
  • 0
  • undefined
  • null

Typescript

Included is an index.d.ts file, Typescript should automatically pick this file up and apply the typings across your codebase.

import { hasDeepValue, has } from "has-deep-value";
 
hasDeepValue({ hello: "world" }, "hello"); //-> true
has("hello.world")({ hello: { world: "" } }); //-> true

Examples

Default

hasDeepValue({ hello: 'world' }, 'hello'); //-> true
hasDeepValue({ hello: { world: '' } }, 'hello.world'); //-> true
hasDeepValue({ hello: { world: { deep: null } } }, 'hello.world.deep'); //-> true
hasDeepValue({ hello: { world: { deep: () => 100; } } }, 'hello.world.deep'); //-> true

hasDeepValue({ hello: { world: '' } }, 'hello.world.deep'); //-> false

hasDeepValue('', ''); //-> false
hasDeepValue(undefined, 'undefined'); //-> false
hasDeepValue(false, 'false'); //-> false
hasDeepValue(null, 'null'); //-> false
hasDeepValue(0, 'hello'); //-> false
hasDeepValue(NaN, 'world'); //-> false
hasDeepValue(() => {}, 'f'); //-> false

Functional

const has = require('has-deep-value').has;
const hasHelloWorld = has('hello.world');
hasHelloWorld({ hello: { world: '' } }); //-> true
hasHelloWorld({ helloworld: '' }); //-> false

// Etc... the same usage of the default case
const objects = [{...}, {...}, {...}];
// Check if all objects conform to { hello: { world: '' } }
if (objects.map(hasHelloWorld).every(e => e)) {
    ...
}
// A different example
if (objects.map(has('account.profile.image')).every(e => e)) {
    ...
}

License

Copyright © 2018-2021, Alex Burghardt. Made available under the MIT license.

About

An utility function to check if any arbitrary object has any property on any deep level.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •