繁体   English   中英

如何从JavaScript中的字符串生成树

[英]How to generate a tree from a string in JavaScript

寻找帮助,从字符串生成嵌套对象树。

例子1

A > B > C

应导致对象:

{
 name: A,
 children: [{
  name: B,
  children: [{
   name: C
  }],
 }]
}

例子2

A > B > C | A > D > E

结果对象:

{
 name: A,
 children: [{
  name: B,
  children: [{
   name: C
  },{
   name: D,
   children: [{
    name: E
   }],
  }],
 }]
}

到目前为止,我有:

问题是,我不确定如何正确解决嵌套问题。

let categoryTree = {
  categories: [{}]
}

const split = (string, seperator = '|', splitter = ' > ') => {
  if (!string.includes(seperator)) {
    let results = string.split(splitter)

    for (let i = 0; i < results.length; i++) {
      let lastNode = 0
      if (i != 0) {
        lastNode = i - 1
      }
      makeTree(results[i], results[lastNode], i)
    }

  }
  console.log(categoryTree)
  return categoryTree
}

const makeTree = (item, parent, i) => {
  if (categoryTree.categories[parent].name === item && categoryTree.categories[parent].name) {
    console.log('IN')
    categoryTree.categories[parent].categories.push({
      name: item,
      categories: [{}]
    })
  } else {
    categoryTree.categories.push({name: item, categories: []})
  }
}

您可以对对象使用迭代和递归方法作为对项目的引用。

 var result = [], string = 'A > B > C | A > D > E'; string.split(' | ').forEach(function (a) { var keys = a.split(' > '), last = keys.pop(); keys.reduce(function (r, k) { if (!r[k]) { r[k] = { _: [] }; r._.push({ name: k, children: r[k]._ }); } return r[k]; }, this)._.push({ name: last }); }, { _: result }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM