a-to-treejs
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

Profile

Convert array to tree fastly, and opposite. 中文版

Installation

npm i a-to-treejs

Usage

import arrayToTree from 'a-to-treejs'

const data1 = [
  {
    id: 1,
    name: 'Node1',
    parent_id: undefined
  },
  {
    id: 2,
    name: 'Node2',
    parent_id: 1
  },
  {
    id: 3,
    name: 'Node3',
    parent_id: 2
  },
  {
    id: 4,
    name: 'Node4',
    parent_id: null
  }
]
arrayToTree(data1)

/*
 * Output:

 * Node1
 *   Node2
 *     Node3
 * Node4
 */

const data2 = [
  {
    _id: '1',
    name: 'Node1',
    parent: null
  },
  {
    _id: '2',
    name: 'Node2',
    parent: '1'
  },
  {
    _id: '3',
    name: 'Node3',
    parent: '2'
  },
  {
    _id: '4',
    name: 'Node4',
    parent: null
  }
]
 
arrayToTree(data2, {
  id: '_id',
  parent_id: 'parent',
  children_prop: 'myChildren',
  parent_prop: 'myParent',
  root: 'branch'
})

/*
 * Output 

 * Node1
 *   Node2
 *     Node3
 * Node4
 * 
 * Note1: each node own 'myChildren' property that refers to its children
 * Note2: each node own 'myParent' property that refers to its parent
 * Note3: each first-level node as the topest branch node in tree
 */

const data3 = [
  {
    id: 1,
    name: 'Node1',
    parent_id: undefined
  },
  {
    id: 2,
    name: 'Node2',
    parent_id: 1
  },
  {
    id: 3,
    name: 'Node3',
    parent_id: 2
  },
  {
    id: 4,
    name: 'Node4',
    parent_id: null
  }
]

arrayToTree(data3, {
  parent_prop: 'myParent',
  root: 'leaf'
})

/*
 * Output
 *       null
 *     Node1
 *   Node2
 * Node3
 *   null
 * Node4
 * 
 * Note1: each first-level node as the leaf node in tree
 * Note3: each node own 'myParent' property that refers to its parent
 */

Note

Each function provided by the lib makes sideEffect, the origin data will be changed. We can use function like 'deepClone' to avoid it.

API

arrayToTree<S = any>(data: any[], option?: OptionA2T): S[]

interface OptionA2T {
  /** Define a property that can differentiate each node, by default 'id'. */
  id?: string  
  /** Define a property that can differentiate node's parent, by default 'parent_id'. */
  parent_id?: string
  /** Define a property of node that refers to its parent, by default 'parent' if 'root' as 'leaf'. */
  parent_prop?: string,
  /** Define a property of node that refers to its children by default 'children' if 'root' as 'branch'. */
  children_prop?: string,
  /** Define a property of node that wrap the its value. */
  container_prop?: string,
  /**
   * How to reflect the structure of the tree? choose 'branch' or 'leaf' as 'root' (way to iterate tree).
   * Determines whether node in result as the topest branch node or leaf node.
   * By default 'branch'.
   * */
  root?: 'branch' | 'leaf',
  /**
   * Function will be called more strictly, by default false. It will throw error in follwing cases: <br/>
   * 1. dulipcated node.id <br/>
   * 2. unkonwn parent.id <br/>
   * 3. self.id equals certain ancestor.id
   *  */
  strict?: boolean
}

treeToArray<S = any>(data: any[], option?: OptionT2A): S[]

interface OptionT2A {
  /**
   * Define a property that can differentiate each node, by default 'id'.
   * It's necessary, when 'root' is 'leaf'.
   * */
  id?: string  
  /** Does what propery of node refer to its' parent? (this property will be deleted) */
  parent_prop?: string,
  /** Does what propery of node refer to its' children? this property will be deleted)*/
  children_prop?: string,
  /** Does what propery of node wrap its' value? this property will be deleted)*/
  container_prop?: string
  /**
   * How to reflect the structure of the tree? choose 'branch' or 'leaf' as 'root' (way to iterate tree).
   * Determines whether starting point of tree is the topest branch node or leaf node.
   * By default 'branch'.
   * */
  root?: 'branch' | 'leaf'
}

Package Sidebar

Install

npm i a-to-treejs

Weekly Downloads

8

Version

1.0.2

License

MIT

Unpacked Size

101 kB

Total Files

18

Last publish

Collaborators

  • zbd-lover