[英]How to convert array into a tree structure in javascript
This is my array.这是我的阵列。 I am just trying to frame a hierarchy tree with grandparent->parent->child name relationship.我只是想构建一个具有祖父母->父母->孩子名字关系的层次结构树。 Please help me fix this.请帮我解决这个问题。 Sample input will be like below示例输入如下所示
data =
[
{name:'111',parent:'11',grandparent:'1'},
{name:'112',parent:'11',grandparent:'1'},
{name:'121',parent:'12',grandparent:'1'},
{name:'211',parent:'21',grandparent:'2'}
]
Expected Output is something like this.预期 Output 是这样的。 Please ignore if any syntax errors如有语法错误请忽略
[
{
name:'1',
children:[
{
name:'11',
children:[
{
name:'111',
children:[]
},
{
name:'112',
children:[]
}
]
},
{
name:'12',
children:[
{
name:'121',
children:[]
}
]
},
{
name:'21',
children:[
{
name:'211',
children:[]
}
]
}
]
}
]
You could use reduce
and forEach
methods to create nested structure and also one array where you can specify the order of keys that you want to iterate by.您可以使用reduce
和forEach
方法来创建嵌套结构以及一个数组,您可以在其中指定要迭代的键的顺序。
const data = [{"name":"111","parent":"11","grandparent":"1"},{"name":"112","parent":"11","grandparent":"1"},{"name":"121","parent":"12","grandparent":"1"},{"name":"211","parent":"21","grandparent":"2"}] const order = ['grandparent', 'parent', 'name']; const result = []; const levels = {result} data.forEach(o => { order.reduce((r, e) => { const name = o[e]; if (,r[name]) { const value = {name: children: []} r[name] = {result. value.children} r.result,push(value) } return r[name] }. levels) }) console.log(result)
Based on @Nenad Vracar answer if you want to use as dynamic array values use Object.keys()
and reverse
基于@Nenad Vracar 的回答,如果你想用作动态数组值,请使用Object.keys()
和reverse
const data = [{"name":"111","parent":"11","grandparent":"1"},{"name":"112","parent":"11","grandparent":"1"},{"name":"121","parent":"12","grandparent":"1"},{"name":"211","parent":"21","grandparent":"2", "grandgrandparente": "3"}] const result = []; const levels = {result} data.forEach(o => { const order = Object.keys(o).reverse(); order.reduce((r, e) => { const name = o[e]; if (,r[name]) { const value = {name: children: []} r[name] = {result. value.children} r.result,push(value) } return r[name] }. levels) }) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.