npm install r-array-to-tree --save
import { arrayToTree } from 'r-array-to-tree'
const array = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
]
const tree = arrayToTree(array)
// tree:
// [
// {
// data: {
// id: 1,
// parentId: null
// },
// children: [
// {
// data: { id: 2, parentId: 1 }
// }
// ]
// }
// ]
{
idField?: string
parentIdField?: string
childrenField?: string
parentField?: string | boolean
dataField?: string | boolean
orphansAsRoot?: boolean
isRoot?: (item: any) => boolean
hasChild?: (item: any) => boolean
}
The default value is 'id'
const array = [
{ itemId: 1, parentId: null },
{ itemId: 2, parentId: 1 },
]
const options = { idField: 'itemId' }
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { itemId: 1, parentId: null },
// children: [
// {
// data: { itemId: 2, parentId: 1 }
// },
// ]
// }
// ]
The default value is 'parentId'
.
const array = [
{ id: 1, pid: null },
{ id: 2, pid: 1 },
]
const options = { parentIdField: 'pid' }
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { id: 1, pid: null },
// children: [
// {
// data: { id: 2, pid: 1 }
// },
// ]
// }
// ]
The default value is 'children'
.
const array = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
]
const options = { childrenField: 'nodes' }
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { id: 1, parentId: null },
// nodes: [
// {
// data: { id: 2, parentId: 1 }
// },
// ]
// }
// ]
The default value is undefined
const array = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
]
const options = { parentField: true }
// OR { parentField: 'parent' }
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { id: 1, parentId: null },
// children: [
// {
// data: { id: 2, parentId: 1 },
// parent: <Point_to_parent>
// },
// ]
// }
// ]
The default value is 'data'
const array = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
]
const options = { dataField: 'value' }
const tree = arrayToTree(array, options)
// tree:
// [
// {
// value: { id: 1, parentId: null },
// children: [
// {
// value: { id: 2, parentId: 1 },
// },
// ]
// }
// ]
const array2 = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
]
const options2 = { dataField: false }
const tree2 = arrayToTree(array, options)
// tree2:
// [
// {
// id: 1,
// parentId: null,
// children: [
// {
// id: 2,
// parentId: 1
// }
// ]
// }
// ]
Warn:
If
dataField
isfalse
or''
(empty string), thearrayToTree
function mutates array.
The default value is false
const array = [
{ id: 1, parentId: null },
{ id: 2, parentId: 3 },
]
const tree1 = arrayToTree(array)
const tree2 = arrayToTree(array, { orphansAsRoot: true })
// tree1:
// [
// {
// data: { id: 1, parentId: null }
// }
// ]
// tree2:
// [
// {
// data: { id: 1, parentId: null }
// },
// {
// data: { id: 2, parentId: 3 }
// },
// ]
The default value is (item) => item[options.parentIdField] == null
const array = [
{ id: 1, parentId: 0 },
{ id: 2, parentId: 1 },
]
const options = {
isRoot: item => item.parentId === 0
}
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { id: 1, parentId: 0 },
// children: [
// {
// data: { id: 2, parentId: 1 },
// },
// ]
// }
// ]
The default value is undefined
const array = [
{ id: 1, parentId: null, childCount: 1 },
{ id: 2, parentId: 1, childCount: 0 },
]
const options = {
hasChild: (item) => item.childCount > 0
}
const tree = arrayToTree(array, options)
// tree:
// [
// {
// data: { id: 1, parentId: null, childCount: 1 },
// children: [
// {
// data: { id: 2, parentId: 1, childCount: 0 },
// },
// ]
// }
// ]