Security News
Combatting Alert Fatigue by Prioritizing Malicious Intent
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
performant-array-to-tree
Advanced tools
Converts an array of items with ids and parent ids to a nested tree in a performant `O(n)` way. Runs in browsers and node.
Converts an array of items with ids and parent ids to a nested tree in a performant way (time complexity O(n)
). Runs in browsers and node.
Other packages have stricter assumptions or are not as performant, as they often use nested loops or recursion. For example:
o-unflatten requires the input to be ordered such that parent nodes always come before their children.
un-flatten-tree uses 2 nested loops (time complexity O(n^2)
).
This implementation does not require any order of items in the input array and focuses on runtime performance. It uses an index and a single loop (time complexity O(n)
). It was inspired by this discussion on StackOverflow.
yarn add performant-array-to-tree
or if using npm
npm install --save performant-array-to-tree
const tree = arrayToTree([
{ id: '4', parentId: null, custom: 'abc' },
{ id: '31', parentId: '4', custom: '12' },
{ id: '1941', parentId: '418', custom: 'de' },
{ id: '1', parentId: '418', custom: 'ZZZz' },
{ id: '418', parentId: null, custom: 'ü'},
])
// output
tree === [
{ data: { id: '4', parentId: null, custom: 'abc' }, children: [
{ data: { id: '31', parentId: '4', custom: '12' }, children: [] },
] },
{ data: { id: '418', parentId: null, custom: 'ü'}, children: [
{ data: { id: '1941', parentId: '418', custom: 'de' }, children: [] },
{ data: { id: '1', parentId: '418', custom: 'ZZZz' }, children: [] },
] },
]
You can provide a second argument to arrayToTree with configuration options. Right now, you can set the following:
id
: key of the id field of the itemparentId
: key of the parent's id field of the itemExample:
const tree = arrayToTree([
{ num: '4', ref: null, custom: 'abc' },
{ num: '31', ref: '4', custom: '12' },
{ num: '1941', ref: '418', custom: 'de' },
{ num: '1', ref: '418', custom: 'ZZZz' },
{ num: '418', ref: null, custom: 'ü'},
], { id: 'num', parentId: 'ref' })
// output
tree === [
{ data: { num: '4', ref: null, custom: 'abc' }, children: [
{ data: { num: '31', ref: '4', custom: '12' }, children: [] },
] },
{ data: { num: '418', ref: null, custom: 'ü'}, children: [
{ data: { num: '1941', ref: '418', custom: 'de' }, children: [] },
{ data: { num: '1', ref: '418', custom: 'ZZZz' }, children: [] },
] },
]
This project includes types, just import the module as usual:
import { arrayToTree } from 'performant-array-to-tree'
const tree = arrayToTree(array)
FAQs
Converts an array of items with ids and parent ids to a nested tree in a performant `O(n)` way. Runs in browsers and node.
The npm package performant-array-to-tree receives a total of 64,897 weekly downloads. As such, performant-array-to-tree popularity was classified as popular.
We found that performant-array-to-tree demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
Security News
License exceptions modify the terms of open source licenses, impacting how software can be used, modified, and distributed. Developers should be aware of the legal implications of these exceptions.