[英]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.