@jtoodre/hierarchy-tree

    1.0.0 • Public • Published

    HierarchyTree

    A tool which will make your array of objects into an array of trees setting the objects in parent-children relationships. For code documentation check HierarchyTree

    Important assumptions on your input data:

    • Your array has to be in order of the hierarchies
    • Hierarchies for sequential objects should be in growing order (e.g. 1 -> 2 -> 3 not 1 -> 3)
    • Each element should have hierarchy indicator

    Important notes on output:

    • Output is array of objects provided
      • Object has parent node spread
      • Objects' child nodes are in an array
      • Object without children does not have children prop

    Parameters

    • data Array<Object> Array of objects to be turned into a tree.
    • options Object Additional options for HierarchyTree.
      • childKey string Key in the tree where children will be stored. When no children this property is undefined. (optional, default 'children')
      • hierarchyKey string Key in the input data where hierarchy level is indicated. (optional, default 'hierarchy')
      • maxHierarchy number Maximum hierarchy depth. If not provided it will be recursively found.
      • hierarchyStart number First level where the hierarchies will start. (optional, default 1)
      • parentObjects parentObjects Gives child its parent items (with 'parentKeys' properties). (optional, default false)
      • parentKey parentKey Key for object where childrens' parents will be stored. When item has no parents this property is undefined. (optional, default 'parents')
      • parentKeys parentKeys When 'parentObjects' is true, each child will have its parents stored with these properties. (optional, default [])

    Examples

    Input for these examples is the same.

    Input

    const input = [
    	{ generation: 1, name: "Kate Cosby", job: "Food Chemist" },
    	{ generation: 2, name: "Lanna Osant", job: "Occupational Therapist" },
    	{ generation: 3, name: "Gasper Povall", job: "Teacher" },
    	{ generation: 4, name: "Gary Harder", job: "Sales Representative" },
    	{ generation: 1, name: "Letisha Penny", job: "Project Manager" },
    	{ generation: 2, name: "Vanna Haglington", job: "Marketing Assistant" },
    	{ generation: 3, name: "Terence Anfosso", job: "Research Associate" },
    	{ generation: 2, name: "Sim Skates", job: "Information Systems Manager" },
    	{ generation: 3, name: "Teodora Aldersley", job: "Geologist II" },
    	{ generation: 3, name: "Arvin Laybourn", job: "Civil Engineer" },
    	{ generation: 1, name: "Carlie Toombes", job: "Systems Administrator I" },
    	{ generation: 1, name: "Culley Endacott", job: "Speech Pathologist" },
    	{ generation: 2, name: "Davidson Penright", job: "Compensation Analyst" },
    	{ generation: 3, name: "Shelagh Janos", job: "Cost Accountant" },
    	{ generation: 4, name: "Penni Geistbeck", job: "Social Worker" },
    	{ generation: 5, name: "Jesselyn Snoding", job: "VP Accounting" },
    	{ generation: 3, name: "Anneliese Berryman", job: "Mechanical Systems Engineer" },
    	{ generation: 2, name: "Andeee Basili", job: "Software Consultant" },
    	{ generation: 3, name: "Hyacinth Baldam", job: "Mechanical Systems Engineer" },
    	{ generation: 1, name: "Maribeth Yewdall", job: "Accountant III" },
    ];
    Example Code #1

    // const HierarchyTree = require('@jtoodre/hierarchy-tree').default; cjs
    import HierarchyTree from '@jtoodre/hierarchy-tree';
    
    const input = [ /* Check Input */ ];
    
    const options = {
    	childKey: 'descendants',
    	hierarchyKey: 'generation'
    };
    
    const treeMaker = new HierarchyTree(input, options);
    const tree = treeMaker.getTree();
    console.log(JSON.stringify(tree, null, 4));
    Example Output #1

    [
        {
            "generation": 1,
            "name": "Kate Cosby",
            "job": "Food Chemist",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Lanna Osant",
                    "job": "Occupational Therapist",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Gasper Povall",
                            "job": "Teacher",
                            "descendants": [
                                {
                                    "generation": 4,
                                    "name": "Gary Harder",
                                    "job": "Sales Representative"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Letisha Penny",
            "job": "Project Manager",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Vanna Haglington",
                    "job": "Marketing Assistant",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Terence Anfosso",
                            "job": "Research Associate"
                        }
                    ]
                },
                {
                    "generation": 2,
                    "name": "Sim Skates",
                    "job": "Information Systems Manager",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Teodora Aldersley",
                            "job": "Geologist II"
                        },
                        {
                            "generation": 3,
                            "name": "Arvin Laybourn",
                            "job": "Civil Engineer"
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Carlie Toombes",
            "job": "Systems Administrator I"
        },
        {
            "generation": 1,
            "name": "Culley Endacott",
            "job": "Speech Pathologist",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Davidson Penright",
                    "job": "Compensation Analyst",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Shelagh Janos",
                            "job": "Cost Accountant",
                            "descendants": [
                                {
                                    "generation": 4,
                                    "name": "Penni Geistbeck",
                                    "job": "Social Worker",
                                    "descendants": [
                                        {
                                            "generation": 5,
                                            "name": "Jesselyn Snoding",
                                            "job": "VP Accounting"
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            "generation": 3,
                            "name": "Anneliese Berryman",
                            "job": "Mechanical Systems Engineer"
                        }
                    ]
                },
                {
                    "generation": 2,
                    "name": "Andeee Basili",
                    "job": "Software Consultant",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Hyacinth Baldam",
                            "job": "Mechanical Systems Engineer"
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Maribeth Yewdall",
            "job": "Accountant III"
        }
    ]
    Example Code #2

    // const HierarchyTree = require('@jtoodre/hierarchy-tree').default; cjs
    import HierarchyTree from '@jtoodre/hierarchy-tree';
    
    const input = [ /* Check Input */ ];
    
    const options = {
    	childKey: 'descendants',
    	hierarchyKey: 'generation',
    	parentObjects: true, 
    	parentKeys: ['generation', 'name'],
    	parentKey: 'predecessors',
    };
    
    const treeMaker = new HierarchyTree(input, options);
    const tree = treeMaker.getTree();
    console.log(JSON.stringify(tree, null, 4));
    Example Output #1

    [
        {
            "generation": 1,
            "name": "Kate Cosby",
            "job": "Food Chemist",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Lanna Osant",
                    "job": "Occupational Therapist",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Gasper Povall",
                            "job": "Teacher",
                            "descendants": [
                                {
                                    "generation": 4,
                                    "name": "Gary Harder",
                                    "job": "Sales Representative",
                                    "predecessors": [
                                        {
                                            "generation": 1,
                                            "name": "Kate Cosby"
                                        },
                                        {
                                            "generation": 2,
                                            "name": "Lanna Osant"
                                        },
                                        {
                                            "generation": 3,
                                            "name": "Gasper Povall"
                                        }
                                    ]
                                }
                            ],
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Kate Cosby"
                                },
                                {
                                    "generation": 2,
                                    "name": "Lanna Osant"
                                }
                            ]
                        }
                    ],
                    "predecessors": [
                        {
                            "generation": 1,
                            "name": "Kate Cosby"
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Letisha Penny",
            "job": "Project Manager",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Vanna Haglington",
                    "job": "Marketing Assistant",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Terence Anfosso",
                            "job": "Research Associate",
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Letisha Penny"
                                },
                                {
                                    "generation": 2,
                                    "name": "Vanna Haglington"
                                }
                            ]
                        }
                    ],
                    "predecessors": [
                        {
                            "generation": 1,
                            "name": "Letisha Penny"
                        }
                    ]
                },
                {
                    "generation": 2,
                    "name": "Sim Skates",
                    "job": "Information Systems Manager",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Teodora Aldersley",
                            "job": "Geologist II",
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Letisha Penny"
                                },
                                {
                                    "generation": 2,
                                    "name": "Sim Skates"
                                }
                            ]
                        },
                        {
                            "generation": 3,
                            "name": "Arvin Laybourn",
                            "job": "Civil Engineer",
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Letisha Penny"
                                },
                                {
                                    "generation": 2,
                                    "name": "Sim Skates"
                                }
                            ]
                        }
                    ],
                    "predecessors": [
                        {
                            "generation": 1,
                            "name": "Letisha Penny"
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Carlie Toombes",
            "job": "Systems Administrator I"
        },
        {
            "generation": 1,
            "name": "Culley Endacott",
            "job": "Speech Pathologist",
            "descendants": [
                {
                    "generation": 2,
                    "name": "Davidson Penright",
                    "job": "Compensation Analyst",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Shelagh Janos",
                            "job": "Cost Accountant",
                            "descendants": [
                                {
                                    "generation": 4,
                                    "name": "Penni Geistbeck",
                                    "job": "Social Worker",
                                    "descendants": [
                                        {
                                            "generation": 5,
                                            "name": "Jesselyn Snoding",
                                            "job": "VP Accounting",
                                            "predecessors": [
                                                {
                                                    "generation": 1,
                                                    "name": "Culley Endacott"
                                                },
                                                {
                                                    "generation": 2,
                                                    "name": "Davidson Penright"
                                                },
                                                {
                                                    "generation": 3,
                                                    "name": "Shelagh Janos"
                                                },
                                                {
                                                    "generation": 4,
                                                    "name": "Penni Geistbeck"
                                                }
                                            ]
                                        }
                                    ],
                                    "predecessors": [
                                        {
                                            "generation": 1,
                                            "name": "Culley Endacott"
                                        },
                                        {
                                            "generation": 2,
                                            "name": "Davidson Penright"
                                        },
                                        {
                                            "generation": 3,
                                            "name": "Shelagh Janos"
                                        }
                                    ]
                                }
                            ],
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Culley Endacott"
                                },
                                {
                                    "generation": 2,
                                    "name": "Davidson Penright"
                                }
                            ]
                        },
                        {
                            "generation": 3,
                            "name": "Anneliese Berryman",
                            "job": "Mechanical Systems Engineer",
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Culley Endacott"
                                },
                                {
                                    "generation": 2,
                                    "name": "Davidson Penright"
                                }
                            ]
                        }
                    ],
                    "predecessors": [
                        {
                            "generation": 1,
                            "name": "Culley Endacott"
                        }
                    ]
                },
                {
                    "generation": 2,
                    "name": "Andeee Basili",
                    "job": "Software Consultant",
                    "descendants": [
                        {
                            "generation": 3,
                            "name": "Hyacinth Baldam",
                            "job": "Mechanical Systems Engineer",
                            "predecessors": [
                                {
                                    "generation": 1,
                                    "name": "Culley Endacott"
                                },
                                {
                                    "generation": 2,
                                    "name": "Andeee Basili"
                                }
                            ]
                        }
                    ],
                    "predecessors": [
                        {
                            "generation": 1,
                            "name": "Culley Endacott"
                        }
                    ]
                }
            ]
        },
        {
            "generation": 1,
            "name": "Maribeth Yewdall",
            "job": "Accountant III"
        }
    ]

    Install

    npm i @jtoodre/hierarchy-tree

    DownloadsWeekly Downloads

    69

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    41 kB

    Total Files

    11

    Last publish

    Collaborators

    • jtoodre