表データからツリー構造への変換(深さ優先探索)

できた。

深さ優先探索を使っています。
まずルートとなる要素を確定し、その要素に子要素を追加し、その子要素の子要素を…を繰り返しています。

昨日やってたのは、終端要素から親となる要素を追加していくという方法でしたが、 うまいこといかんかったので、今日は逆に子要素を追加していく方法でトライしました。
1時間もかからなかったかな。

class Converter {
  convertToTree(nodes) {
    const rootNodes = nodes.filter(node => !node.parentID)
    const rootNode = rootNodes[0]
    rootNode.children = this.buildChildNode(rootNode, nodes)
    console.log('result', rootNode)
  }

  /**
   * Depth first search
   * @param {*} parentNode
   * @param {*} nodes
   */
  buildChildNode(parentNode, nodes) {
    const parentNodeID = parentNode.id
    const childNodes = []
    nodes.forEach(node => {
      if (node.parentID === parentNodeID) {
        childNodes.push(node)
        if (node.hasChild) {
          node.children = this.buildChildNode(node, nodes)
        }
      }
    })
    return childNodes
  }
}