Javascript使用子对象递归JSON数组
有没有一种方法可以递归下面的JSON而不循环嵌套的子对象 我的递归函数肯定缺少一个case,因为它没有返回所有内容Javascript使用子对象递归JSON数组,javascript,json,recursion,Javascript,Json,Recursion,有没有一种方法可以递归下面的JSON而不循环嵌套的子对象 我的递归函数肯定缺少一个case,因为它没有返回所有内容 iterateTree(node, children) { console.log(node.name) if(node.children.length == 0) { return; } for(var i = 0; i < children.length; i++) { var child_node = chil
iterateTree(node, children) {
console.log(node.name)
if(node.children.length == 0) {
return;
}
for(var i = 0; i < children.length; i++) {
var child_node = children[i];
return this.iterateTree(child_node, child_node.children);
}
}
for(var i = 0; i < sample.length; i++) {
var node = sample[i];
this.iterateTree(node, node.children);
}
var sample = [
{
"name": "hello world",
"children": [
{
"name": "fruits",
"children": []
},
{
"name": "vegetables",
"children": []
},
{
"name": "meats",
"children": [
{
"name": "pork",
"children": []
},
{
"name": "beef",
"children": []
},
{
"name": "chicken",
"children": [
{
"name": "organic",
"children": []
},
{
"name": "farm raised",
"children": []
}
]
},
]
}
]
},
{
"name": "second folder",
"children": []
},
{
"name": "third folder",
"children": [
{
"name": "breads",
"children": []
},
{
"name": "coffee",
"children": [
{
"name": "latte",
"children": []
},
{
"name": "cappucino",
"children": []
},
{
"name": "mocha",
"children": []
},
]
},
]
}
]
您可以使用
reduce
方法创建递归函数来迭代嵌套数据结构,返回数组,然后在该数组上使用join
方法
var-sample=[{“name”:“hello world”,“children”:[{“name”:“fruits”,“children”:[]},{“name”:“muts”,“children”:[{“name”:“pork”,“children”:[]},{“name”:“beef”,“children”:[]},{“name”:“organic”,“children”:[]},{“name”:“farm raised”,“children”:“children”:[]}},{“children:[]},{“姓名”:“第三文件夹”,“儿童”:[{“姓名”:“面包”,“儿童”:[]},{“姓名”:“咖啡”,“儿童”:[{“姓名”:“拿铁”,“儿童”:[]},{“姓名”:“卡布西诺”,“儿童”:[]},{“姓名”:“摩卡”,“儿童”:[]}]
函数树(数据,prev=''){
返回数据。减少((r,e)=>{
r、 推送(上一个+e.name)
if(e.childrence.length)r.push(…树(e.children,prev+'-');
返回r;
}, [])
}
常量结果=树(示例).join('\n')
console.log(结果)
var-sample=[{“name”:“hello world”,“children”:[{“name”:“fruits”,“children”:[]},{“name”:“muts”,“children”:[{“name”:“pork”,“children”:[]},{“name”:“beef”,“children”:[]},{“name”:“organic”,“children”:[]},{“name”:“farm raised”,“children”:“children”:[]}},{“children:[]},{“姓名”:“第三文件夹”,“儿童”:[{“姓名”:“面包”,“儿童”:[]},{“姓名”:“咖啡”,“儿童”:[{“姓名”:“拿铁”,“儿童”:[]},{“姓名”:“卡布西诺”,“儿童”:[]},{“姓名”:“摩卡”,“儿童”:[]}]
级别=0;
变量连字符=“”;
函数递归_循环{
console.log(连字符+s.name);
var c=s.儿童;
如果(c.length)连字符+='-';
var empty=false;
for(设i=0;i
我们用于许多数据处理/遍历任务。只要你把头绕在它身上,它就会很强大。下面是你解决问题的方法
//const objectScan=require('object-scan');
常量显示=(输入)=>objectScan(['**']{
反面:错,
rtn:'条目',
filterFn:({value})=>typeof value==='string'
})(输入)
.map([k,v])=>`${'-'.repeat(k.length/2-1)}${v}`);
const sample=[{name:'你好,世界',儿童:[{name:'水果',儿童:[]},{name:'蔬菜',儿童:[]},{name:'肉',儿童:[]},{name:'牛肉',儿童:[]},{name:'有机',儿童:[]},{name:'农场饲养',儿童:[]},{name:'second folder',children:[]},{name:'third folder',children:[{name:'breads',children:[]},{name:'cafte',children:[]},{name:'mocha',children:[]},{name:'capucino',children;
常量结果=显示(样本);
result.forEach((l)=>console.log(l));
//=>你好,世界
//=>-水果
//=>-蔬菜
//=>-肉类
//=>--猪肉
//=>--牛肉
//=>--鸡肉
//=>---有机
//=>---农场饲养
//=>第二个文件夹
//=>第三个文件夹
//=>-面包
//=>-咖啡
//=>--拿铁
//=>--卡普西诺
//=>--摩卡咖啡
。作为控制台包装{最大高度:100%!重要;顶部:0}
您能提供一个代码片段进行验证吗?谢谢,这是一个令人印象深刻的函数。但是,如果您想输出嵌套的- 组合,而不是纯文本破折号(-),该怎么办。
hello world
-fruits
-vegetables
-meats
--pork
--beef
--chicken
---organic
---farm raised
second folder
third folder
-breads
-coffee
--latte
--cappucino
--mocha