Get Value is a robust utility for retrieving nested values from JavaScript objects using property path strings (like 'a.b.c') or arrays. It stands out from other dot-prop libraries by correctly handling keys that contain dots, supporting escaped characters, and offering extensive customization options.
npm install get-valueESM (ES Modules):
import getValue from "get-value";CommonJS:
const getValue = require("get-value");The package provides dual module support with both ESM and CommonJS exports.
import getValue from "get-value";
const obj = {
a: {
b: {
c: 'nested value'
}
}
};
// Basic path access
const value = getValue(obj, 'a.b.c');
console.log(value); // 'nested value'
// With default value
const missing = getValue(obj, 'a.b.d', { default: 'fallback' });
console.log(missing); // 'fallback'
// Array paths
const arrayValue = getValue(obj, ['a', 'b', 'c']);
console.log(arrayValue); // 'nested value'Get Value uses a sophisticated path traversal algorithm that:
Main function for retrieving nested values from objects using property paths.
/**
* Retrieves nested values from objects using dot notation paths or arrays
* @param target - The object to retrieve values from
* @param path - Property path (dot notation string, array of segments, or number)
* @param options - Configuration options or default value for backwards compatibility
* @returns The retrieved value or default value if not found
*/
function getValue<T>(target: T): T;
function getValue(target: object, path: string | string[], options?: Options): any;
function getValue(target: object, path: string | string[], defaultValue?: any): any;Usage Examples:
import getValue from "get-value";
// Return entire object when no path provided
const data = { user: { profile: { name: 'John' } } };
getValue(data); // { user: { profile: { name: 'John' } } }
// Basic nested access
getValue(data, 'user.profile.name'); // 'John'
// Array index access
const users = { items: ['Alice', 'Bob', 'Charlie'] };
getValue(users, 'items.1'); // 'Bob'
// Keys with dots
const config = { 'api.endpoint': { url: 'https://api.com' } };
getValue(config, 'api.endpoint.url'); // 'https://api.com'
// Default values with options object
getValue(data, 'user.settings.theme', { default: 'light' }); // 'light'
// Legacy syntax (default as third parameter)
getValue(data, 'missing.path', 'fallback'); // 'fallback'
// Array path notation
getValue(data, ['user', 'profile', 'name']); // 'John'Options interface for customizing getValue behavior.
interface Options {
/** Default value to return when property not found */
default?: any;
/** Custom separator for splitting paths (default: '.') */
separator?: string | RegExp;
/** Character for rejoining path segments (default: same as separator) */
joinChar?: string;
/** Custom function for joining path segments */
join?: (segs: string[]) => string;
/** Custom function for splitting paths */
split?: (path: string) => string[];
/** Validation function for each resolved key */
isValid?: <K extends string>(key: K, object: Record<K, any>) => boolean;
}Advanced Configuration Examples:
import getValue from "get-value";
// Custom separator
const data = { 'a.b': { c: { d: 'value' } } };
getValue(data, 'a.b/c/d', { separator: '/' }); // 'value'
// Regex separator for escaped dots
getValue(data, 'a\\.b.c.d', { separator: /\\?\./ }); // 'value'
// Custom split function
getValue(data, 'a.b|c|d', {
split: (path) => path.split('|')
}); // 'value'
// Custom join character for keys with different separator
const config = { 'api-key': { settings: 'value' } };
getValue(config, 'api.key.settings', { joinChar: '-' }); // 'value'
// Validation function
getValue(data, 'a.b.c', {
isValid: (key, obj) => obj.hasOwnProperty(key)
}); // Only access own properties
// Multiple options
getValue(data, 'complex/path', {
separator: '/',
default: null,
isValid: (key, obj) => typeof obj[key] !== 'undefined'
});Get Value supports backslash escaping for path segments containing special characters.
Escape Handling Examples:
import getValue from "get-value";
// Escaped dots in path segments
const obj = { 'file.txt': { content: 'data' } };
getValue(obj, 'file\\.txt.content'); // 'data'
// Multiple escapes
const complex = { 'a.b': { 'c.d': { 'e.f': 'nested' } } };
getValue(complex, 'a\\.b.c\\.d.e\\.f'); // 'nested'
// Mixed escaped and unescaped
getValue(complex, 'a\\.b.c\\.d', { default: 'missing' }); // { 'e.f': 'nested' }The function accepts multiple path formats for maximum flexibility.
Path Format Examples:
import getValue from "get-value";
const data = {
users: [
{ profile: { name: 'Alice' } },
{ profile: { name: 'Bob' } }
]
};
// String paths with dot notation
getValue(data, 'users.0.profile.name'); // 'Alice'
// Array paths
getValue(data, ['users', '1', 'profile', 'name']); // 'Bob'
// Numeric paths (converted to string)
getValue(data, 123); // data['123'] if it exists
// Mixed array with different types
getValue(data, ['users', 0, 'profile', 'name']); // 'Alice'
// Numeric keys are converted to strings
const obj = { 123: 'numeric key' };
getValue(obj, 123); // 'numeric key'Get Value works with functions as target objects, accessing their properties.
Function Target Examples:
import getValue from "get-value";
// Functions with properties
function myFunction() {}
myFunction.config = { debug: true };
myFunction.metadata = { version: '1.0' };
getValue(myFunction); // Returns the function itself
getValue(myFunction, 'config'); // { debug: true }
getValue(myFunction, 'config.debug'); // true
getValue(myFunction, 'metadata.version'); // '1.0'
// Nested function properties
function api() {}
api.endpoints = {
users: { url: '/api/users' },
posts: { url: '/api/posts' }
};
getValue(api, 'endpoints.users.url'); // '/api/users'Get Value never throws exceptions and handles edge cases gracefully.
Error Handling Examples:
import getValue from "get-value";
// Null/undefined targets
getValue(null, 'any.path'); // null
getValue(undefined, 'any.path'); // undefined
getValue(null, 'any.path', { default: 'safe' }); // 'safe'
// Invalid paths
getValue({}, null); // {}
getValue({}, undefined); // {}
// Non-object intermediate values
const data = { a: 'string', b: 42 };
getValue(data, 'a.nested.prop'); // undefined
getValue(data, 'a.nested.prop', { default: 'fallback' }); // 'fallback'
// Array access on non-arrays
getValue({ items: 'not-array' }, 'items.0'); // undefined