【问题标题】:how to properly use recursive function to go through multiple nested objects如何正确使用递归函数遍历多个嵌套对象
【发布时间】:2016-03-17 19:53:04
【问题描述】:

在我的 Angular 应用程序中,我使用 AngularTree 指令 (http://wix.github.io/angular-tree-control) 来呈现以下数据结构的树视图,如 https://jsfiddle.net/eugene_goldberg/Lvwxx629/17/ 所示:

$scope.subjectAreas = [
        {
            name:   "Area-1",
            link:   "dashboards.dashboard_1",
            entities: [
                {
                    name: "entity 1"
                },
                {
                    name: "entity 2"
                }
            ],
            offerings: [
                {
                    name: "offering 1"
                },
                {
                    name: "offering 2"
                }
            ]
        },
        {
            name:   "Area-2",
            link:   "dashboards.dashboard_1",
            entities: [
                {
                    name: "entity 3"
                }
            ],
            offerings: [
                {
                    name: "offering 3"
                }
            ]
        },
        {
            name:   "Area-3",
            link:   "dashboards.dashboard_1",
            entities: [
                {
                    name: "entity 4"
                },
                {
                    name: "entity 5"
                },
                {
                    name: "entity 6"
                }
            ],
            offerings: [
                {
                    name: "offering 4"
                },
                {
                    name: "offering 5"
                }
            ]
        }
    ];

这个 treeView 指令提供了“createSubTree”函数,我使用如下:

function createSubTree(ary) {
        var res = [];
        if (ary) {
            res = ary.map(function(v, k) {
                var id = k + 1;
                return {
                    i: id,
                    id: 'id' + id,
                    label: v.name,
                    children: createSubTree(v.entities)
                }
            });

        }
        return res;
    }

    $scope.treedata = createSubTree($scope.subjectAreas);

输出如下:

Area-1
   entity-1
   entity-2
Area-2
   entity-3
Area-3
   entity-4
   entity-5
   entity-6

由于我的数据结构包含每个 SubjectArea(实体和产品)的两个嵌套数组,我需要有一个用于实体的子文件夹和一个用于作为每个 SubjectArea 子级的产品的子文件夹,因此输出应该看起来像这样:

Area-1
   entities
       entity-1
       entity-2
   offerings
       offering-1
       offering-2
Area-2
   entities   
       entity-3
   offerings
       offering-3
Area-3
   entities
       entity-4
       entity-5
       entity-6
   offerings
       offering-4
       offering-5

如何修改当前代码以使递归函数为实体和产品创建子组?

【问题讨论】:

  • 其实很简单,您所要做的就是按照您查看数据的方式创建数据。试一试,如果您仍然需要帮助,请告诉我。如果我没记错的话,不需要更改代码。
  • 我认为,每个 SubjectArea 都需要一个命名的顶级数组,但我正在努力以正确的方式实际包装它。

标签: javascript angularjs recursion


【解决方案1】:

将您的数据更改为:

$scope.subjectAreas = [{
    name: "Area-1",
    link: "dashboards.dashboard_1",
    entities: [{
        name: 'entities',
        entities: [{
            name: "entity 1"
        }, {
            name: "entity 2"
        }]
    }, {
        name: 'offerings',
        entities: [{
            name: "offering 1"
        }, {
            name: "offering 2"
        }]
    }]
}, {
    name: "Area-2",
    link: "dashboards.dashboard_1",
    entities: [{
        name: "entity 3"
    }],
    offerings: [{
        name: "offering 3"
    }]
}, {
    name: "Area-3",
    link: "dashboards.dashboard_1",
    entities: [{
        name: "entity 4"
    }, {
        name: "entity 5"
    }, {
        name: "entity 6"
    }],
    offerings: [{
        name: "offering 4"
    }, {
        name: "offering 5"
    }]
}];

我只完成了第一部分,但您可以完成其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多