Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript使用子对象递归JSON数组_Javascript_Json_Recursion - Fatal编程技术网

Javascript使用子对象递归JSON数组

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

有没有一种方法可以递归下面的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 = 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