我尝试转换这个结构(每个子对象都是属性):
const tree = {
"Parent 1" : {
"Children1": {
"Children2": {
"#1": { info: {}},
"#2": { info: {}}.
"#3": { info: {}}
},
"Children1-1": {
"Children2-2": {
"#1": { info: {}},
"#2": { info: {}}.
"#3": { info: {}}
}
},
"Parent 2": {
...
}
};
在这个具有父子视图的树结构中。但在我的树的尽头我不需要孩子
const resultTeee = [
{
name: 'Parent 1',
children: [
{
name: 'Children 1',
children: [
{
name: 'Children 2',
children: [
{name: "#1", info: {}},
{name: "#2", info: {}}
]
}
]
},
{
name: 'Children 1-1',
children: [
{
name: 'Children 2-2',
children: [
{name: "#1", info: {}},
{name: "#2", info: {}}
]
}
]
}
]
},
{
name: 'Parent 2'
....
}
]
我尝试了“遍历树”方法,但不知道如何切换新的子路径。对象可以在每个级别上具有多个嵌套结构。
发布于 2019-11-22 13:27:51
const toArrayTree = (obj) => {
return Object.keys(obj).map(key => {
return {name: key, children: [toArrayTree(obj[key])]}
})
}用于测试的对象
const tree = {
"Parent 1" : {
"Children1": {
"Children2": {
"#1": { info: {}},
"#2": { info: {}},
"#3": { info: {}},
}
},
},
"Parent 2" : {
"Children2.1": {
"Children2.2": {
"#4": { info: {}},
"#5": { info: {}},
"#6": { info: {}},
}
},
},
};但是就像阿迪加说的,为什么最后一棵树不是{ name: 'info', children: [] }
更新解决方案
const toArrayTree = (obj) => {
return Object.keys(obj).map(key => {
return typeof obj[key] === 'object' ?
{name: key, children: [toArrayTree(obj[key])]} :
{name: key, [key]: obj[key]};
})
}使用Object(v) === v确实是个坏主意,因为如果v是函数,例如
https://stackoverflow.com/questions/58994759
复制相似问题