tree-flatter
v1.0.2
Published
Transforms a nested tree structure into a flat list, each item has it's children reference and parent reference.
Downloads
367
Readme
tree-flatter
Transforms a nested tree structure into a flat list, each item has it's children reference and parent reference.
Installation
$ npm install tree-flatter
Usage
Default
import treeFlatter from 'tree-flatter';
const tree = [
{
name: 'item1',
children: [
{
name: 'item2',
children: [
{name: 'item3'}
]
},
{ name: 'item4' }
]
}
];
const options = {
initNode: node => node, // <= default, consider node => _.clone(node) to avoid mutating the tree
};
const list = treeFlatter(tree, 'children', options);ÏÏÏÏÏ
Results in:
[
{id: 1, name: 'item1', children: [2, 4]},
{id: 2, name: 'item2', children: [3], parent: 1},
{id: 3, name: 'item3', parent: 2},
{id: 4, name: 'item4', parent: 1}
]
Specifies item idKey and children itemKey
import treeFlatter from 'tree-flatter';
const tree = [
{
name: 'item1',
objectID: 'aaaaaaaaaaaaaaa',
layers: [
{
name: 'item2',
objectID: 'aaaaaaaaaaaaaaa2',
layers: [
{
name: 'item3',
objectID: 'aaaaaaaaaaaaaaa3',
}
]
},
{
name: 'item4',
objectID: 'aaaaaaaaaaaaaaa4',
}
]
}
];
const list = treeFlatter(tree, , {
idKey: 'objectID',
itemsKey: 'layers',
);
Results in:
[
{ objectID: 'aaaaaaaaaaaaaaa', name: 'item1', layers: ['aaaaaaaaaaaaaaa2', 'aaaaaaaaaaaaaaa4'] },
{ objectID: 'aaaaaaaaaaaaaaa2', name: 'item2', layers: ['aaaaaaaaaaaaaaa3'], parent: 'aaaaaaaaaaaaaaa' },
{ objectID: 'aaaaaaaaaaaaaaa4', name: 'item4', parent: 'aaaaaaaaaaaaaaa' },
{ objectID: 'aaaaaaaaaaaaaaa3', name: 'item3', parent: 'aaaaaaaaaaaaaaa2' },
]
API
/**
* Flatten tree-object
*
* @param {Array|Object} tree - Object tree
* @param {Object} options - Config options
* @param {Function=} [options.initNode=(node=>node)] - Initialize node
* @param {String=} [options.itemsKey='children'] - Specifies item's children itemsKey
* @param {String=} [options.idKey='id'] - Specifies item's idKey
* @param {Number=} [options.uniqueIdStart=1] - Unique id start
* @param {Function=} [options.generateUniqueId=(() => settings.uniqueIdStart++)] - Unique id generator
*
* @return {Object[]} Flatten collection
*/
Unit test
$ npm t
License
MIT