Skip to content
A general tree support tree operation.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


npm version Build Status

A general tree support tree operation.


Install by Yarn:

yarn add general-tree

Install by NPM:

npm install --save general-tree


Import the module in file:

import Tree from 'general-tree';


You can convert a javascript object to a tree. It will use several key to identify id and children.

Constructor declaration is:

    parent = undefined,
    childrenKey = 'children',
    idKey = 'id',
    onStatusChange = undefined
  • root: Object to be converted.
  • parent: A Tree object to be parent node.
  • childrenKey: root[childrenKey] will be used to generate children Tree node. root[childrenKey] === undefined means it is a leaf node.
  • idKey: root[idKey] is an identifier of node, and will be used when initialization. It will be converted to a string when used.
  • onStatusChange: When a tree node's selection status change, it will be called with current node.


const node = {
    code: 1,
    label: 'Hello',
    childs: [
        {code: 2, label: 'aaa', childs: []}, // not a leaf
        {code: 3, label: 'bbb'}, // a leaf
const tree = new Tree(node, null, 'childs', 'code', null);

Selection Status

A tree node have a selection status.

export const NotSelect = 0;
export const IncompleteSelect = 0.5;
export const FullSelect = 1;

A leaf node only have two status: NotSelect or FullSelect.

A not leaf node have all three status. IncompleteSelect means its children is not all selected.

The selection status will be initialized in constructor with NotSelect. And you can use setInitialState to set a initial selection state of a tree.

Then you can call update method to change a tree node selection status automatically.


  • isLeaf(): boolean
  • isEqual(treeNode: Tree): boolean
  • selectStatus(cascade: boolean): 0 | 0.5 | 1
  • isFullSelect(cascade: boolean): boolean
  • isNotSelect(cascade: boolean): boolean
  • isIncompleteSelect(cascade: boolean): boolean
  • getLeafCount(): number
  • getSelectedLeafCount(): number
  • getDeepth(): number
  • getInfo(): object
  • getId(): any
  • getStringId(): string
  • getParent(): Tree?
  • getChildren(): Tree[]?
  • getLeafChildren(): Tree[]
  • getLeafChildrenCount(): number
  • getSelectedLeafChildrenCount(): number
  • getPath(): string
  • setInitialState(selectedIds: any[], cascade: boolean): Tree[]
  • update(cascade: boolean): void
  • search(text: string, keys: string[], multiselect: boolean, exactly: boolean, canSearch: boolean): Tree[]
  • hasAncestor(ancestor: Tree): boolean
  • findById(childId: any): Tree[]
You can’t perform that action at this time.