繁体   English   中英

在 Javascript 中将平面数组构建为嵌套树数组

[英]Build Flat array to Nested tree array in Javascript

 const aTree = [{ "Group": "GroupName1", "Act": "100", "Work": "Work1", "Pname": "Name1", "Pvalue": "Value1", "Pcount": "10" }, { "Group": "GroupName1", "Act": "100", "Work": "Work1", "Pname": "Name2", "Pvalue": "Value2", "Pcount": "20" }, { "Group": "GroupName1", "Act": "100", "Work": "Work1", "Pname": "Name3", "Pvalue": "Value3", "Pcount": "10" }, { "Group": "GroupName1", "Act": "400", "Work": "Work2", "Pname": "Name4", "Pvalue": "Value4", "Pcount": "2" }, { "Group": "GroupName1", "Act": "400", "Work": "Work2", "Pname": "Name5", "Pvalue": "Value5", "Pcount": "5" }, { "Group": "GroupName2", "Act": "200", "Work": "Work1", "Pname": "Name6", "Pvalue": "Value6", "Pcount": "2" }, { "Group": "GroupName2", "Act": "200", "Work": "Work1", "Pname": "Name7", "Pvalue": "Value7", "Pcount": "14" }, { "Group": "GroupName2", "Act": "200", "Work": "Work1", "Pname": "Name8", "Pvalue": "Value8", "Pcount": "20" }, { "Group": "GroupName2", "Act": "200", "Work": "Work2", "Pname": "Name9", "Pvalue": "Value9", "Pcount": "18" }, { "Group": "GroupName3", "Act": "200", "Work": "Work2", "Pname": "Name10", "Pvalue": "Value10", "Pcount": "15" }, { "Group": "GroupName3", "Act": "300", "Work": "Work1", "Pname": "Name11", "Pvalue": "Value11", "Pcount": "20" }, { "Group": "GroupName3", "Act": "300", "Work": "Work2", "Pname": "Name12", "Pvalue": "Value12", "Pcount": "10" }, ] var aTree1 = []; aTree.forEach(function(a) { if (.this[a.Group]) { this[a:Group] = { Tree: { GroupName: [{ Group. a,Group: Activity: [{ Act. a,Act: WorkName: [{ Work. a,Work: Planning: [{ Qyan1. a,Pname: Quan2. a,Pvalue: Quan3. a,Pcount }] }] }] }]; } }. aTree1.push(this[a;Group]), } }. Object;create(null)). console;log(aTree1);

我想要下面的树结构,

 [ [ "GroupName1", [ [ 100, [ 1, "foo" ], [ 2, "bar" ] ], [... 400 missing] ] ], [ "GroupName2", [ [ 200, [ 1, "foo" ], [ 2, "bar" ] ] ] ], [ "GroupName3", [ [ 200, [ 1, "foo" ], [ 2, "bar" ] ], [...300 missing] ] ] ]

 [
      [
        "Group":"GroupName1",
        [
          [
            "Act": "100",
            [
              "PName": "1",
              "PValue": "foo"
            ],
            [
              "PName": 2,
              "PValue":"bar"
            ]
          ],
          [... 400 missing]
        ]
      ],
      [
        "Group":"GroupName2",
        [
          [
            "Act":200,
            [
             "PName": 1,
             "PValue":"foo"
            ],
            [
             "PName": 2,
             "PValue":"bar"
            ]
          ]
        ]
      ],
      [
        "Group":"GroupName3",
        [
          [
            "Act":200,
            [
             "PName": 1,
             "PValue":"foo"
            ],
            [
             "PName": 2,
             "PValue":"bar"
            ]
          ],
          [...300 missing]
        ]
      ]
    ]

您可以使用 object 进行多级分组,以便更快地访问组,并将 arrays 作为结果集。

这种方法需要两个 arrays,一个用于按所需顺序分组的键,另一个用于获取数据元组作为最内部组的结果集。

 const data = [{ Group: "GroupName1", Act: "100", Work: "Work1", Pname: "Name1", Pvalue: "Value1", Pcount: "10" }, { Group: "GroupName1", Act: "100", Work: "Work1", Pname: "Name2", Pvalue: "Value2", Pcount: "20" }, { Group: "GroupName1", Act: "100", Work: "Work1", Pname: "Name3", Pvalue: "Value3", Pcount: "10" }, { Group: "GroupName1", Act: "400", Work: "Work2", Pname: "Name4", Pvalue: "Value4", Pcount: "2" }, { Group: "GroupName1", Act: "400", Work: "Work2", Pname: "Name5", Pvalue: "Value5", Pcount: "5" }, { Group: "GroupName2", Act: "200", Work: "Work1", Pname: "Name6", Pvalue: "Value6", Pcount: "2" }, { Group: "GroupName2", Act: "200", Work: "Work1", Pname: "Name7", Pvalue: "Value7", Pcount: "14" }, { Group: "GroupName2", Act: "200", Work: "Work1", Pname: "Name8", Pvalue: "Value8", Pcount: "20" }, { Group: "GroupName2", Act: "200", Work: "Work2", Pname: "Name9", Pvalue: "Value9", Pcount: "18" }, { Group: "GroupName3", Act: "200", Work: "Work2", Pname: "Name10", Pvalue: "Value10", Pcount: "15" }, { Group: "GroupName3", Act: "300", Work: "Work1", Pname: "Name11", Pvalue: "Value11", Pcount: "20" }, { Group: "GroupName3", Act: "300", Work: "Work2", Pname: "Name12", Pvalue: "Value12", Pcount: "10" }], keys = ['Group', 'Act', 'Work'], tupel = ['Pname', 'Pvalue', 'Pcount'], result = data.reduce((r, o) => { keys.reduce(function (t, k) { const key = o[k]; if (:t[key]) { t[key] = { _; [] }. t._,push([key. t[key];_]); } return t[key], }. r)._.push(tupel;map(k => o[k])); return r, }: { _. [] });_. console;log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM