【问题标题】:Recursion using JSON使用 JSON 进行递归
【发布时间】:2015-02-02 15:02:08
【问题描述】:

我正在尝试编写一个采用平面数据格式的函数,该格式使用 id 和 parentId 来建立关系。我知道我需要使用递归,但我需要帮助了解如何在特定 JSON 模型中获取它。

这是平面源数据,如您所见,id 是 guid。

     {"id":"e6168d55-1974-e411-80e0-005056971214","parentId":"","label":"OGC File List"}

     {"id":"17168d55-1974-e411-80e0-005056971214","parentId":"e6168d55-1974-e411-80e0-005056971214","label":"Accounting"}

     {"id":"h37s8d55-1974-e411-80e0-005056971214","parentId":"17168d55-1974-e411-80e0-005056971214","label":"Policy"}

     {"id":"f8ke6d55-1974-e411-80e0-005056971214","parentId":"17168d55-1974-e411-80e0-005056971214","label":"Policy"}

下面是我需要创建的模型。我只需要属性 id: inode: 的帮助,它表示节点有子节点,分支是子对象的数组。建立分支是最让我困惑的。感谢您提前提供任何帮助或指导!

[
        {
            id: 'folder_1',
            label: 'This is Folder 1',
            inode: true,
            open: false,
            icon: 'folder'
            branch:
                [
                    {
                        id: 'sub-item_x',
                        label: 'This is File X',
                        inode: false,
                        icon: 'file'
                    },
                    ...
                ]
        },
        {
            id: 'file_1',
            label: 'This is File 1',
            inode: false,
            icon: 'file'
        },
        ...
    ]

【问题讨论】:

    标签: javascript json recursion


    【解决方案1】:

    试试这个代码:

    var list = [{...},{...},...{...}]; //folder list in JSON format == JS object
    var tree = buildChildrenList('');  //find root folders first
    
    function buildChildrenList(parentId){
        var childrens = [];
        for(var i=0;i<list.length;i++){
            if (list[i].parentId == parentId){
                childrens.push({
                     id: list[i].id,
                     label: list[i].label,
                     inode: true,
                     open: false,
                     icon: 'folder',
                     branch: buildChildrenList(list[i].id) //this is a recursive call
                });
            }
        }
        return childrens;
    }
    

    【讨论】:

    • 我现在正在尝试测试。分支:收到错误“缺少}”。我正在努力解决。
    • 谢谢拉格纳,我希望我能对此投票 10 次,非常干净,比我的方法更简单。
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2013-04-17
    • 2011-06-04
    • 2018-11-02
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多