Skip to Content
UtilsObject

Object utils

import { pick, get, deepMerge } from '@gg-software/utils';

pick / omit

New object with only / without the given keys.

pick({ a: 1, b: 2, c: 3 }, ['a', 'c']); // { a: 1, c: 3 } omit({ a: 1, b: 2, c: 3 }, ['b']); // { a: 1, c: 3 }

get

Safe nested read via a dot path; numeric segments index arrays.

get(user, 'address.city'); // "Praha" | undefined get(order, 'items.0.name', 'n/a'); // fallback when missing get(obj, ['a', 'b', 0]); // array path form
ParameterTypeDefault
objunknown
pathstring | (string | number)[]
fallbackTundefined

set

Nested write via a dot path — mutates obj, creating intermediate objects (or arrays for numeric segments). Returns obj.

set({}, 'a.b.c', 1); // { a: { b: { c: 1 } } } set({}, 'items.0.name', 'x'); // { items: [{ name: "x" }] }

deepMerge

Recursive merge of plain objects — later sources win, plain objects merge deep, everything else (arrays included) is replaced. Non-mutating.

deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } } deepMerge({ tags: ['a'] }, { tags: ['b'] }); // { tags: ["b"] } deepMerge(defaults, savedSettings, overrides);

deepClone

Deep clone via structuredClone — handles Dates, Maps, Sets, nested structures. Functions are not cloneable (throws, per the platform).

const copy = deepClone(state);

isEmpty

null/undefined, '', [], {}, empty Map/Set → true. Numbers and booleans are never empty.

isEmpty(null); // true isEmpty(''); // true isEmpty([]); // true isEmpty({}); // true isEmpty(0); // false isEmpty({ a: 1 }); // false