* [`chunk`](#usage-chunk) | [`mergeObjects` / `merge`](#usage-mergeObjects) | [`add`](#usage-add) | [`clear` / `empty`](#usage-clear) * [`pick`](#usage-pick) | [`omit`](#usage-omit) | [`get`](#usage-get) | [`set`](#usage-set) * [`remove.at`](#usage-remove-at) | [`remove.first`](#usage-remove-first) | [`remove.last`](#usage-remove-last) | [`remove.byMatch`](#usage-remove-byMatch) | [`remove.byKey`](#usage-remove-byKey) | [`remove.byValue`](#usage-remove-byValue) | [`remove.all`](#usage-remove-all) * [`find.at`](#usage-find-at) | [`find.first`](#usage-find-first) | [`find.last`](#usage-find-last) | [`find.all`](#usage-find-all) | [`find.key`](#usage-find-key) | [`find.value`](#usage-find-value) | [`find.byMatch`](#usage-find-byMatch) --- ## .chunk **Description** Splits an object into an array of smaller objects (chunks). Ideal for batched processing of object properties. Mirrors the array API. **Parameters** * `obj` (Object): The source object. * `size` (Number): The maximum number of keys per chunk. **Returns** * (Object[]): An array of partial objects. **Example** ```javascript const data = { a: 1, b: 2, c: 3 }; const chunks = $.data.chunk(data, 2); // Result: [{ a: 1, b: 2 }, { c: 3 }] ``` --- ## .add **Description** Safely adds a key-value pair at a specific index without mutating the original object (Immutable). Note: While modern browsers generally respect object insertion order, relying strictly on object key order is not always recommended. **Parameters** * `obj` (Object): The original object. * `key` (String): The key to add. * `value` (Any): The value to add. * `index` (Number, optional): The position to insert at. Defaults to the end. Negative values count from the back. **Returns** * (Object): A new object including the added element. **Example** ```javascript const list = { a: 1, c: 3 }; const result = $.data.add(list, 'b', 2, 1); // Result: { a: 1, b: 2, c: 3 } ``` --- ## .clear (Alias: .empty) **Description** Clears the object and returns a new empty object. This method is strictly immutable; it does not mutate the original object, ensuring a safe functional approach when resetting state. **Parameters** * `obj` (Object): The object to clear. **Returns** * (Object): A new, empty object (`{}`). **Example** ```javascript const userProfile = { name: 'Sven', role: 'Admin' }; const resetProfile = $.data.clear(userProfile); // Alternatively: $.data.empty(userProfile); // Result: resetProfile is {}, userProfile remains unchanged ``` --- ## .mergeObjects (Alias: .merge) **Description** Recursively merges one or more source objects into a target object (Deep Merge). *Note: This modifies the `target` object in place.* **Parameters** * `target` (Object): The target object to receive properties. * `...sources` (Object[]): One or more source objects to merge into the target. **Returns** * (Object): The modified target object. **Example** ```javascript const defaults = { app: { theme: 'light', debug: false } }; const config = { app: { debug: true } }; $.data.merge(defaults, config); // Alternatively: $.data.mergeObjects(defaults, config); // defaults is now: { app: { theme: 'light', debug: true } } ``` --- ## .pick **Description** Creates a new object containing *only* the specified keys (Allowlist). **Parameters** * `obj` (Object): The source object. * `keys` (String[]): An array of keys to keep. **Returns** * (Object): A new object with the selected keys. **Example** ```javascript const user = { id: 1, name: 'Alice', role: 'admin' }; const publicProfile = $.data.pick(user, ['name']); // Result: { name: 'Alice' } ``` --- ## .omit **Description** Creates a new object containing all keys *except* the specified ones (Blocklist). **Parameters** * `obj` (Object): The source object. * `keys` (String[]): An array of keys to remove. **Returns** * (Object): A new object without the specified keys. **Example** ```javascript const user = { id: 1, name: 'Alice', password: '123' }; const safeUser = $.data.omit(user, ['password']); // Result: { id: 1, name: 'Alice' } ``` --- ## .get **Description** Safely retrieves a value from a nested object using dot-notation. Returns `undefined` if the path does not exist, preventing runtime errors. **Parameters** * `obj` (Object): The object to query. * `path` (String): The path as a dot-notation string (e.g., `'user.address.city'`). **Returns** * (Any): The found value or `undefined`. **Example** ```javascript const val = $.data.get(response, 'data.items.0.id'); ``` --- ## .set **Description** Sets a value deeply within a nested object. It automatically creates missing intermediate objects if the path doesn't exist. **Parameters** * `obj` (Object): The object to modify. * `path` (String): The path string (e.g., `'settings.theme.color'`). * `value` (Any): The value to set. **Returns** * (Void): This function mutates the object and returns nothing. **Example** ```javascript const config = {}; $.data.set(config, 'database.connection.host', 'localhost'); // config is now: { database: { connection: { host: 'localhost' } } } ``` --- ## .remove.at **Description** Removes an entry at a specific index and returns a new object (Immutable). Supports negative indices to count from the end. **Parameters** * `obj` (Object): The source object. * `index` (Number): The index to remove. **Returns** * (Object): A new object without the entry at the specified index. **Example** ```javascript const data = { a: 1, b: 2, c: 3 }; const result = $.data.remove.at(data, -1); // Result: { a: 1, b: 2 } ``` --- ## .remove.first **Description** Removes the first entry of the object and returns the rest as a new object (Immutable). **Parameters** * `obj` (Object): The source object. **Returns** * (Object): A new object without the first entry. **Example** ```javascript const queue = { first: 'Task 1', second: 'Task 2' }; const nextQueue = $.data.remove.first(queue); // Result: { second: 'Task 2' } ``` --- ## .remove.last **Description** Removes the last entry of the object and returns the rest as a new object (Immutable). **Parameters** * `obj` (Object): The source object. **Returns** * (Object): A new object without the last entry. **Example** ```javascript const stack = { a: 1, b: 2, c: 3 }; const newStack = $.data.remove.last(stack); // Result: { a: 1, b: 2 } ``` --- ## .remove.byMatch **Description** Removes **all** entries that match the search query condition (Immutable). Acts as an inverse filter. **Parameters** * `obj` (Object): The source object. * `query` (String|Number): The search term. * `mode` (String, optional): Comparison mode: `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. * `searchBy` (String, optional): Search by `'key'` or `'value'`. Default is `'key'`. **Returns** * (Object): A new object containing only the items that **did not** match. **Example** ```javascript const config = { api_key: '123', secret: 'abc', api_url: 'http' }; const safeConfig = $.data.remove.byMatch(config, 'api_', 'startsWith', 'key'); // Result: { secret: 'abc' } ``` --- ## .remove.byKey **Description** Removes a specific key-value pair from the object based on its key (Immutable). **Parameters** * `obj` (Object): The source object. * `key` (String): The exact key to remove. **Returns** * (Object): A new object without the specified key. **Example** ```javascript const user = { a: 1, b: 2, c: 3 }; const result = $.data.remove.byKey(user, 'b'); // Result: { a: 1, c: 3 } ``` --- ## .remove.byValue **Description** Removes all entries that match a specific value exactly (using strict equality `!==`). **Parameters** * `obj` (Object): The source object. * `value` (Any): The exact value to remove. **Returns** * (Object): A new object without the matching values. **Example** ```javascript const scores = { alice: 10, bob: 5, charlie: 10 }; const result = $.data.remove.byValue(scores, 10); // Result: { bob: 5 } ``` --- ## .remove.all **Description** Alias for `.clear()`. Empties the object immutably. --- ## .find.at **Description** Returns the n-th entry of an object as a `[key, value]` pair. Supports negative indices to count from the end. **Parameters** * `obj` (Object): The object to search. * `index` (Number): The 0-based index. Negative numbers count from the back. **Returns** * ([String, Any] | undefined): A tuple containing the key and value, or undefined. **Example** ```javascript const data = { a: 1, b: 2, c: 3 }; const entry = $.data.find.at(data, -1); // Result: ['c', 3] ``` --- ## .find.all **Description** Returns a NEW OBJECT containing ALL elements that match the condition. Similar to `filter()` but returns a partial object. Mirrors the array API. **Parameters** * `obj` (Object): The object to search. * `query` (String|Number): The search term. * `mode` (String, optional): `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. * `searchBy` (String, optional): Search by `'key'` or `'value'`. Default is `'key'`. **Returns** * (Object): A new object containing only the matching elements. **Example** ```javascript const config = { a: 1, b: 2, c: 1 }; // Find all entries where the value is exactly 1 const matches = $.data.find.all(config, 1, 'exact', 'value'); // Result: { a: 1, c: 1 } ``` --- ## .find.first **Description** Finds the **first** entry where the key or value matches the query. **Parameters** * `obj` (Object): The object to search. * `query` (String|Number): The search term. * `mode` (String, optional): Comparison mode: `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. * `searchBy` (String, optional): Search by `'key'` or `'value'`. Default is `'key'`. **Returns** * ([String, Any] | undefined): The first matching `[key, value]` pair. **Example** ```javascript const config = { admin_id: 10, user_id: 20 }; // Find first entry where key starts with 'user' const match = $.data.find.first(config, 'user', 'startsWith', 'key'); // Result: ['user_id', 20] ``` --- ## .find.last **Description** Finds the **last** entry where the key or value matches the query. Useful for prioritized overrides or ordered objects. **Parameters** * `obj` (Object): The object to search. * `query` (String|Number): The search term. * `mode` (String, optional): `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. * `searchBy` (String, optional): `'key'` or `'value'`. Default is `'key'`. **Returns** * ([String, Any] | undefined): The last matching `[key, value]` pair. **Example** ```javascript const files = { 'script.js': 1, 'style.css': 2, 'main.css': 3 }; // Find last entry where key ends with '.css' const match = $.data.find.last(files, '.css', 'endsWith', 'key'); // Result: ['main.css', 3] ``` --- ## .find.key **Description** Finds **all keys** in the object that match the query. **Parameters** * `obj` (Object): The object to search. * `query` (String): The search term. * `mode` (String, optional): `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. **Returns** * (String[]): An array of matching keys. **Example** ```javascript const settings = { theme_dark: true, theme_light: false, lang: 'en' }; const themes = $.data.find.key(settings, 'theme_', 'startsWith'); // Result: ['theme_dark', 'theme_light'] ``` --- ## .find.value **Description** Finds **all values** in the object that match the query. **Parameters** * `obj` (Object): The object to search. * `query` (String): The search term. * `mode` (String, optional): `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. **Returns** * (Any[]): An array of matching values. **Example** ```javascript const roles = { bob: 'admin', alice: 'editor', john: 'admin' }; const admins = $.data.find.value(roles, 'admin', 'exact'); // Result: ['admin', 'admin'] ``` --- ## .find.byMatch **Description** Finds the **key** of the first match based on the query condition. This mirrors the array method (which returns a numeric index), but returns the string key for objects. **Parameters** * `obj` (Object): The object to search. * `query` (String|Number): The search term. * `mode` (String, optional): `'exact'`, `'contains'`, `'startsWith'`, `'endsWith'`. Default is `'exact'`. * `searchBy` (String, optional): Search by `'key'` or `'value'`. Default is `'key'`. **Returns** * (String | undefined): The key of the first matching entry, or `undefined`. **Example** ```javascript const roles = { user: 'standard', alice: 'admin', bob: 'editor' }; // Find the key of the first entry where the value is 'admin' const adminKey = $.data.find.byMatch(roles, 'admin', 'exact', 'value'); // Result: 'alice' ```