121 lines
3.6 KiB
Markdown
121 lines
3.6 KiB
Markdown
# object-treeify
|
|
|
|
[](https://circleci.com/gh/blackflux/object-treeify)
|
|
[](https://coveralls.io/github/blackflux/object-treeify?branch=master)
|
|
[](https://dependabot.com)
|
|
[](https://david-dm.org/blackflux/object-treeify)
|
|
[](https://www.npmjs.com/package/object-treeify)
|
|
[](https://www.npmjs.com/package/object-treeify)
|
|
[](https://github.com/semantic-release/semantic-release)
|
|
[](https://github.com/blackflux/js-gardener)
|
|
|
|
Stringify Object as tree structure
|
|
|
|
```
|
|
{
|
|
oranges: {
|
|
'mandarin': { ├─ oranges
|
|
clementine: null, │ └─ mandarin
|
|
tangerine: 'so cheap and juicy!' -=> │ ├─ clementine
|
|
} │ └─ tangerine: so cheap and juicy!
|
|
}, └─ apples
|
|
apples: { ├─ gala
|
|
'gala': null, └─ pink lady
|
|
'pink lady': null
|
|
}
|
|
}
|
|
```
|
|
|
|
Project was inspired by [treeify](https://github.com/notatestuser/treeify) and works almost identical. However
|
|
the algorithm is much shorter and faster, works without recursion and is very memory efficient. Furthermore
|
|
the output can be sorted using a custom comparator function.
|
|
|
|
## Install
|
|
|
|
$ npm install --save object-treeify
|
|
|
|
## Usage
|
|
|
|
<!-- eslint-disable import/no-unresolved,import/no-extraneous-dependencies -->
|
|
```js
|
|
const treeify = require('object-treeify');
|
|
|
|
treeify({
|
|
oranges: {
|
|
mandarin: {
|
|
clementine: null,
|
|
tangerine: 'so cheap and juicy!'
|
|
}
|
|
},
|
|
apples: {
|
|
gala: null,
|
|
'pink lady': null
|
|
}
|
|
}, {/* options */});
|
|
|
|
// =>
|
|
// ├─ oranges
|
|
// │ └─ mandarin
|
|
// │ ├─ clementine
|
|
// │ └─ tangerine: so cheap and juicy!
|
|
// └─ apples
|
|
// ├─ gala
|
|
// └─ pink lady
|
|
```
|
|
|
|
### Features
|
|
|
|
- Allows for custom sorting
|
|
- Very fast and memory efficient implementation
|
|
- Input traversed exactly once
|
|
- Dependency free and small in size
|
|
- Tests to verify correctness
|
|
|
|
## Options
|
|
|
|
### joined
|
|
|
|
Type: `boolean`<br>
|
|
Default: `true`
|
|
|
|
By default a single string is returned. Can be set to `false` to instead return an array containing lines.
|
|
|
|
#### spacerNoNeighbour
|
|
|
|
Type: `string`<br>
|
|
Default: ` `
|
|
|
|
Prefix for depth level when no further neighbour is present.
|
|
|
|
#### spacerNeighbour
|
|
|
|
Type: `string`<br>
|
|
Default: `│ `
|
|
|
|
Prefix for depth level when a further neighbour is present.
|
|
|
|
#### keyNoNeighbour
|
|
|
|
Type: `string`<br>
|
|
Default: `└─ `
|
|
|
|
Prefix for key when no further neighbour is present.
|
|
|
|
#### keyNeighbour
|
|
|
|
Type: `string`<br>
|
|
Default: `├─ `
|
|
|
|
Prefix for key when a further neighbour is present.
|
|
|
|
#### sortFn
|
|
|
|
Type: `function`<br>
|
|
Default: `null`
|
|
|
|
Function that defines the key sort order. Defaults to ordering of `Object.keys(...)`, which is typically insertion order.
|
|
|
|
## Examples
|
|
|
|
More examples can be found in the tests.
|