JavaScript-Algorithms icon indicating copy to clipboard operation
JavaScript-Algorithms copied to clipboard

想到一个更好的解法

Open 981377660LMT opened this issue 3 years ago • 0 comments

原题 : 编写一个算法解析以下符号,转换为json树的结构

class TNode {
  name: string
  children?: TNode[]
  constructor(name: string, children?: TNode[]) {
    this.name = name
    this.children = children
  }
}

// 编写一个算法解析以下符号,转换为json树的结构
const str = `<xml><div><p><a/></p><p></p></div></xml><xml><div><p><a/></p><p></p></div></xml>`

// 解法
const toTree = (str: string) => {
  const root = new TNode('', [])

  const dfs = (str: string, parent: TNode) => {
    const regexp = /<(.*?)>(.*?)<\/\1>/g
    const match = [...str.matchAll(regexp)]

    if (match.length) {
      for (const group of match) {
        const name = group[1]
        const childStr = group[2]
        const root = new TNode(name, [])
        parent.children!.push(root)
        dfs(childStr, root)
      }
    } else {
      parent.children!.push(new TNode(str))
    }
  }
  dfs(str, root)

  return root.children
}

981377660LMT avatar Aug 31 '21 12:08 981377660LMT