nestedChildren
These utilities help in transforming flat data structures into nested hierarchical formats. They work with both lists and objects and can include depth information if required.
createChildrenListByObj#
Creates a nested hierarchical structure from a flat data object, adding children and optional depth information.
Function Signature#
const createChildrenListByObj = < S extends Record<string, T>, T extends Record<string, any>, K extends string, D extends string = '',>( obj: S, { currentKeyId, parentKeyName, childrenKeyName, depthCreateName, depth?: number, }: { currentKeyId: KeysOfUnion<S>; parentKeyName: KeysOfUnion<T>; childrenKeyName: K; depthCreateName?: D; depth?: number; },) => ChildrenNestedObj<T, K, D>;Parameters#
obj: S: The data object where keys are IDs and values are data objects.
currentKeyId: The ID of the current object to process.
parentKeyName: The key name that holds the parent ID.
childrenKeyName: The key name where the children will be stored.
depthCreateName: Optional key name to store the depth of the current object.
depth: The current depth level (default is 0).
Returns#
ChildrenNestedObj<T, K, D>: The nested object with children and optional depth information.
nestedChildrenByList#
Transforms a flat list of objects into a hierarchical structure based on parent-child relationships.
Function Signature#
export const nestedChildrenByList = <T extends Record<string, any>, P, K extends string, D extends string = ''>( list: T[], { idKeyName, parentKeyName, childrenKeyName, parentValue, depthCreateName, depth?: number, }: { idKeyName: KeysOfUnion<T>; parentKeyName: KeysOfUnion<T>; childrenKeyName: K; parentValue: P; depthCreateName?: D; depth?: number; },) => ChildrenNestedObj<T, K, D>[];Parameters#
list: T[]: The flat list of data objects.
idKeyName: The key name for the object's unique ID.
parentKeyName: The key name for the parent ID.
childrenKeyName: The key name where children will be added.
parentValue: The value to match for the root parent objects.
depthCreateName: Optional key name to store the depth of each object.
depth: The initial depth level (default is 0).
Returns#
ChildrenNestedObj<T, K, D>[]: The list of nested objects with children and optional depth information.
nestedChildrenByObj#
Transforms a flat data object into a hierarchical structure based on parent-child relationships.
Function Signature#
export const nestedChildrenByObj = <T extends Record<string, any>, P, K extends string, D extends string = ''>( obj: Record<string | number, T>, { idKeyName, parentKeyName, childrenKeyName, parentValue, depthCreateName, depth?: number, }: { idKeyName: KeysOfUnion<T>; parentKeyName: KeysOfUnion<T>; childrenKeyName: K; parentValue: P; depthCreateName?: D; depth?: number; },) => ChildrenNestedObj<T, K, D>[];Parameters#
obj: Record<string | number, T>: The data object where keys are IDs and values are data objects.
idKeyName: The key name for the object's unique ID.
parentKeyName: The key name for the parent ID.
childrenKeyName: The key name where children will be added.
parentValue: The value to match for the root parent objects.
depthCreateName: Optional key name to store the depth of each object.
depth: The initial depth level (default is 0).
Returns#
ChildrenNestedObj<T, K, D>[]: The list of nested objects with children and optional depth information.
Example Usage#
nestedChildrenByList#
const list = [ { id: 1, name: 'Root', parentId: null }, { id: 2, name: 'Child 1', parentId: 1 }, { id: 3, name: 'Child 2', parentId: 1 }, { id: 4, name: 'Grandchild 1', parentId: 2 }, { id: 5, name: 'Grandchild 2', parentId: 3 },];
// Create nested structureconst result = nestedChildrenByList(list, { idKeyName: 'id', parentKeyName: 'parentId', childrenKeyName: 'children', parentValue: null,});
console.log(result);nestedChildrenByObj#
const obj = { 1: { id: 1, name: 'Root', parentId: null }, 2: { id: 2, name: 'Child 1', parentId: 1 }, 3: { id: 3, name: 'Child 2', parentId: 1 }, 4: { id: 4, name: 'Grandchild 1', parentId: 2 }, 5: { id: 5, name: 'Grandchild 2', parentId: 3 },};
// Create nested structureconst result = nestedChildrenByObj(obj, { idKeyName: 'id', parentKeyName: 'parentId', childrenKeyName: 'children', parentValue: null,});
console.log(result);