Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 从平面列表父子对象创建层次对象_Javascript_Json_Parent Child - Fatal编程技术网

Javascript 从平面列表父子对象创建层次对象

Javascript 从平面列表父子对象创建层次对象,javascript,json,parent-child,Javascript,Json,Parent Child,我试图理解JS中创建对象以传递给树状视图组件的最佳方法。我很难理解该从何处着手。我尝试过做各种事情,比如将父子关系编号拆分成一个数组,然后对它们进行迭代,将它们推到一个新对象中,但我仍然不知道如何保持这些关系。我需要递归吗 给定以下父子关系列表,以及关联的深度级别 1 , depth 1 1.1, depth 2 1.1.1, depth 3 1.1.2, depth 3 1.2.1, depth 3 1.2.2, depth 3 1.2.3, depth 3 1.2.3.4, depth 4

我试图理解JS中创建对象以传递给树状视图组件的最佳方法。我很难理解该从何处着手。我尝试过做各种事情,比如将父子关系编号拆分成一个数组,然后对它们进行迭代,将它们推到一个新对象中,但我仍然不知道如何保持这些关系。我需要递归吗

给定以下父子关系列表,以及关联的深度级别

1 , depth 1
1.1, depth 2
1.1.1, depth 3
1.1.2, depth 3
1.2.1, depth 3
1.2.2, depth 3
1.2.3, depth 3
1.2.3.4, depth 4
和下面的输出树

1
-1
--1
--2
-2
--1
---1
...
生成的对象应该是

[
  {
    "1": {
      "depth": "1",
      "child": {
        "1.1": {
          "depth": "2",
          "child": {
            "1.1.1": {
              "depth": "3",
              "child": null
            }
          }
        }
      }
    },
    "2": {
      "level": "2",
      "depth": "1",
      "child": {
        "2.1": {
          "depth": "2",
          "child": {
            "2.1.1": {
              "depth": "3",
              "child": null
            }
          }
        }
      }
    }
  }
]

在JS中,迭代列表并生成树形图,或者至少生成树形图组件可以使用的对象的最佳方法是什么?

通过具有排序项数组和级别信息,您可以使用助手数组在给定级别跟踪最后插入的项,并使用此存储将嵌套项放置到正确的位置

此方法不依赖于给定的
标题
,只依赖于项目的顺序和
级别

var data=[{title:'1',level:1},{title:'1.1',level:2},{title:'1.1.2',level:3},{title:'1.2.1',level:3},{title:'1.2.2',level 3},{title:'1.2.3',level 3},{title:'1.2.3.4}],
结果=[],
级别=[结果];
data.forEach({title,level})=>
级别[level-1]。推送({title,children:levels[level]=[]))
);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
输出什么?html还是数据结构?你试过什么吗?从Andreas的观点来看,JSON是一种用于数据交换的文本符号。如果您处理的是JavaScript源代码,而不是字符串,那么就不是JSON。您可能只想创建嵌套对象,与JSON无关。列表中的“级别”部分似乎是多余的,它隐含在
1.2.3
等。。。?“亲子关系列表”到底是什么样子的?(例如,作为您想要做的事情的输入的数据结构。)您可以按深度对数据源进行排序。然后迭代源代码,创建每个级别。如果深度与上一次迭代相比发生了变化,则降低一个级别。