Javascript 解析JSON的递归数组
所以我有一个角度组件,它有一个嵌套JSON数组。。。我想使用服务将这些嵌套的JSON加载到数组中它们自己的对象中,这样我就可以通过ID进行查找 也许有更好的方法可以根据id通过大型json进行查找,但我真的不确定如何做到这一点 谢谢你查看我的QJavascript 解析JSON的递归数组,javascript,json,angular,Javascript,Json,Angular,所以我有一个角度组件,它有一个嵌套JSON数组。。。我想使用服务将这些嵌套的JSON加载到数组中它们自己的对象中,这样我就可以通过ID进行查找 也许有更好的方法可以根据id通过大型json进行查找,但我真的不确定如何做到这一点 谢谢你查看我的Q //角度分量 公共节点列表=[ {name:'production 1',id:'1',子项:[ {name:'test one',id:'2',子项:[ {name:'development one',id:'3',children:[]} ]},
//角度分量
公共节点列表=[
{name:'production 1',id:'1',子项:[
{name:'test one',id:'2',子项:[
{name:'development one',id:'3',children:[]}
]},
{name:'test two',id:'4',子项:[
{name:'development two',id:'5',children:[]}
]}
]}
];
公共节点列表2=[
{name:'production 2',id:'6',子项:[
{name:'test one',id:'7',子项:[
{name:'development third',id:'8',children:[]}
]},
{name:'test two',id:'9',子项:[
{name:'development four',id:'10',children:[]}
]}
]}
];
构造函数(专用sidenav:SideNavService){
this.sidenav.loadNodes(this.nodeList);
this.sidenav.loadNodes(this.nodeList2);
}
//角度服务
allNodes:Array//这可能不是任何类型的?
//在这里,我想传入类似上面组件中所示的列表,并通过它进行解析,将每个JSON放入列表allNodes中
加载节点(树){
}
//在这里,我想传入一个ID并返回该json,无论它嵌套了多远,此时只需获取名称(名称可能不是唯一的)
查找节点(id:字符串){
}
您可以使用一个递归方法沿着这些线展平您的数组(将语法更改为在此处内联运行):
const节点列表=[
{name:'production 1',id:'1',子项:[
{name:'test one',id:'2',子项:[
{name:'development one',id:'3',children:[]}
]},
{name:'test two',id:'4',子项:[
{name:'development two',id:'5',children:[]}
]}
]}
];
常数nodeList2=[
{name:'production 2',id:'6',子项:[
{name:'test one',id:'7',子项:[
{name:'development third',id:'8',children:[]}
]},
{name:'test two',id:'9',子项:[
{name:'development four',id:'10',children:[]}
]}
]}
];
函数展平arr(arr){
返回arr.reduce((输出,对象)=>{
let children=obj.children
输出推送({
名称:obj.name,
id:obj.id
})
if(children&&children.length){
output=output.concat(flattarr(子级))
}
返回输出
}, [])
}
log(展平arr(nodeList))
您可以通过简单的递归遍历数组,而不是展平它
lookupNode(arr: Array<Object>, id: string) {
if (arr.id === id) {
return arr;
} else if (arr.children) {
for(let i = 0; i < arr.children.length; i++) {
let temp = this.lookupNode(arr.children[i], id);
if (temp !== null) {
return temp;
}
}
} else {
return null;
}
}
lookupNode(arr:Array,id:string){
如果(arr.id==id){
返回arr;
}否则,如果(arr.children){
for(设i=0;i