Skip to content

Code:

js
var data = [
  {
    parent_id: null,
    id: 'a',
    value: 'xxx'
  }, {
    parent_id: 'a',
    id: 'c',
    value: 'xxx'
  }, {
    parent_id: 'd',
    id: 'f',
    value: 'xxx'
  },
  {
    parent_id: 'c',
    id: 'e',
    value: 'xxx'
  },
  {
    parent_id: 'b',
    id: 'd',
    value: 'xxx'
  },
  {
    parent_id: 'a',
    id: 'b',
    value: 'xxx'
  }
]

const map = new Map()

for (const d of data) {
    let m = map.get(d.parent_id)

    if (!m) {
      map.set(d.parent_id, [d])
    } else {
      m.push(d)
    }
}

const fn = (parent_id = null, parent = {}) => {
  const nodes = map.get(parent_id) || []
  parent.children = nodes

  for (const node of nodes) {
    fn(node.id, node)
  }

  return parent
}


console.log(fn())

❤ With Algorithm