array-to-tree-by-keys
v1.0.0
Published
Convert a plain array of nodes to a tree by keys
Readme
array-to-tree-by-keys
Convert a plain array of nodes to a tree by keys.
example:
const arr = [
{
line: '线路1',
type: '类型1',
position: '位置1',
},
{
line: '线路1',
type: '类型1',
position: '位置2',
},
{
line: '线路1',
type: '类型2',
position: '位置1',
},
{
line: '线路1',
type: '类型2',
position: '位置2',
},
{
line: '线路2',
type: '类型1',
position: '位置1',
},
{
line: '线路2',
type: '类型1',
position: '位置2',
},
{
line: '线路2',
type: '类型2',
position: '位置1',
},
{
line: '线路2',
type: '类型2',
position: '位置2',
},
];
const tree = arrayToTreeByKeys(arr, ['line', 'type'], (node, { isLeaf, level }) => {
return Object.assign(node, { isLeaf, level });
});
console.log(tree);output:
[
{
name: '线路1',
children: [
{
name: '类型1',
children: [
{
line: '线路1',
type: '类型1',
position: '位置1',
isLeaf: true,
level: 2,
},
{
line: '线路1',
type: '类型1',
position: '位置2',
isLeaf: true,
level: 2,
},
],
isLeaf: false,
level: 1,
},
{
name: '类型2',
children: [
{
line: '线路1',
type: '类型2',
position: '位置1',
isLeaf: true,
level: 2,
},
{
line: '线路1',
type: '类型2',
position: '位置2',
isLeaf: true,
level: 2,
},
],
isLeaf: false,
level: 1,
},
],
isLeaf: false,
level: 0,
},
{
name: '线路2',
children: [
{
name: '类型1',
children: [
{
line: '线路2',
type: '类型1',
position: '位置1',
isLeaf: true,
level: 2,
},
{
line: '线路2',
type: '类型1',
position: '位置2',
isLeaf: true,
level: 2,
},
],
isLeaf: false,
level: 1,
},
{
name: '类型2',
children: [
{
line: '线路2',
type: '类型2',
position: '位置1',
isLeaf: true,
level: 2,
},
{
line: '线路2',
type: '类型2',
position: '位置2',
isLeaf: true,
level: 2,
},
],
isLeaf: false,
level: 1,
},
],
isLeaf: false,
level: 0,
},
]