What is dlv?
The dlv npm package is a safe deep property access utility. It allows you to access deeply nested properties within an object without the risk of throwing an error if a part of the path does not exist. It's particularly useful when dealing with complex data structures where some properties may be undefined or null.
What are dlv's main functionalities?
Safe property access
Access a deeply nested property without throwing if the path does not exist.
const dlv = require('dlv');
const obj = { a: { b: { c: 1 } } };
const value = dlv(obj, 'a.b.c'); // 1
Default value
Provide a default value if the deep property is undefined.
const dlv = require('dlv');
const obj = { a: { b: { } } };
const value = dlv(obj, 'a.b.c', 'default'); // 'default'
Access array indexes
Access an array index within a deeply nested structure.
const dlv = require('dlv');
const obj = { a: { b: [1, 2, 3] } };
const value = dlv(obj, ['a', 'b', 0]); // 1
Other packages similar to dlv
lodash.get
Lodash's get function is similar to dlv in that it allows for safe access to nested object properties. It is part of the larger Lodash library which offers a wide range of utilities for working with arrays, numbers, objects, strings, etc. Compared to dlv, lodash.get is part of a larger utility library, which might be preferable for some projects that can make use of other Lodash functions.
idx
The idx library provides a utility to safely access deeply nested properties in JavaScript. It uses a callback pattern and is built with TypeScript support. idx is similar to dlv but uses a different syntax and can be more verbose. It also supports TypeScript out of the box, which can be a deciding factor for projects using TypeScript.
dlv(obj, keypath)
Safely get a dot-notated path within a nested object, with ability to return a default if the full key path does not exist or the value is undefined
Why?
Smallest possible implementation: only 130 bytes.
You could write this yourself, but then you'd have to write tests.
Supports ES Modules, CommonJS and globals.
Installation
npm install --save dlv
Usage
delve(object, keypath, [default])
import delve from 'dlv';
let obj = {
a: {
b: {
c: 1,
d: undefined,
e: null
}
}
};
delve(obj, 'a.b.c') === 1;
delve(obj, ['a', 'b', 'c']) === 1;
delve(obj, 'a.b') === obj.a.b;
delve(obj, 'a.b.f') === undefined;
delve(obj, 'a.b.f', 'foo') === 'foo';
delve(obj, 'a.b.d', 'foo') === 'foo';
delve(obj, 'a.b.e', 'foo') === null;
delve(undefined, 'a.b.c') === undefined;
delve(undefined, 'a.b.c', 'foo') === 'foo';
delve(obj, undefined, 'foo') === 'foo';
Setter Counterparts
- dset by @lukeed is the spiritual "set" counterpart of
dlv
and very fast. - bury by @kalmbach does the opposite of
dlv
and is implemented in a very similar manner.
License
MIT