DEV Community

Daniel Bellmas
Daniel Bellmas

Posted on

8 2 1

Build A Tree Array From A Flat Array - Recursion

I got an assignment to display comments in a recursive way, something like so:

Recursive comments

The data I got from the server was flat, meaning:
every item in the array holds a reference to its parent, like so:



const entries = [
  {
    index: 1,
    parent: 0
  },
  {
    index: 2,
    parent: 1
  },
  {
    index: 3,
    parent: 2
  },
   ...
   ...
   ];


Enter fullscreen mode Exit fullscreen mode

After thinking how to "attack" this problem, I realized
If I want a recursive object, then the easiest solution is a recursive one

Here is the function that converts a flat array to a tree array:



const arrayToTree = (arr, parent = 0) =>
  arr.filter(item => item.parent === parent)
     .map(child => ({ ...child, children: arrayToTree(arr, 
     child.index) }));


Enter fullscreen mode Exit fullscreen mode

A quick rundown:

  • We first filter the root parent's children.
  • Then we do the same to each of the children we just grabbed

My answer to the question on Stack overflow

Here is a codepen if you want to play more with the data ot the solution:


Sources that helped me:

Top comments (4)

Collapse
 
rxliuli profile image
rxliuli • Edited

I have written something like this and published it as an npm package

github.com/rxliuli/liuli-tools/blo...

  const [res] = listToTree(
    [
      { id: 3, parent: 1 },
      { id: 4, parent: 1 },
      { id: 1, parent: 0 },
      { id: 2, parent: 0 },
      { id: 5, parent: 2 },
      { id: 6, parent: 2 },
      { id: 0 },
    ],
    {
      id: 'id',
      parentId: 'parent',
      children: 'children',
    },
  )
Enter fullscreen mode Exit fullscreen mode
Collapse
 
danielbellmas profile image
Daniel Bellmas

Cool 😎

Collapse
 
salivity profile image
David Clews

If you are using directories for your structure you could use my solution. It creates a structured object from an array using path and file keys. davidclews.com/article/13.html

Collapse
 
olaf_ranai profile image
Olaf Ranai { dev-it-out }

Nice 👌🏽

This post blew up on DEV in 2020:

js visualized

🚀⚙️ JavaScript Visualized: the JavaScript Engine

As JavaScript devs, we usually don't have to deal with compilers ourselves. However, it's definitely good to know the basics of the JavaScript engine and see how it handles our human-friendly JS code, and turns it into something machines understand! 🥳

Happy coding!

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay