sisterAn / JavaScript-Algorithms

基础理论+JS框架应用+实践,从0到1构建整个前端算法体系
5.51k stars 634 forks source link

想到一个更好的解法 #166

Open 981377660LMT opened 3 years ago

981377660LMT commented 3 years ago

原题 : 编写一个算法解析以下符号,转换为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
}