Flat Array to Tree

by neonDog

HTML

<html>
  <head>
  <title>Unflatten a flat Array</title>
  </head>
  <body>
  
  </body>
</html>

JavaScript

let arr = [
        {id: 1, parent_id: 0},
        {id: 2, parent_id: 0},
        {id: 3, parent_id: 1},
        {id: 4, parent_id: 3},
        {id: 5, parent_id: 4},
        {id: 6, parent_id: 4},
        {id: 7, parent_id: 3},
        {id: 8, parent_id: 2}
    ]
    
    

function getUnflatten(arr, parent_id) {
  let output = []
  for(const obj of arr) {
  
    if(obj.parent_id === parent_id) {
      var children = getUnflatten(arr, obj.id)

      if (children.length) {
        obj.children = children
      }
      output.push(obj)
    }
  }
  return output
}

let tree = getUnflatten(arr, 0)
document.body.innerHTML = `<pre> ${JSON.stringify(tree, null, ' ')}`