使用JSON递归

使用JSON递归

问题描述:

我正在尝试编写一个采用平面数据格式的函数,该数据格式使用IDparentId来建立关系。我知道我需要使用递归,但我需要帮助了解如何在特定的JSON模型中获取它。使用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' 
     }, 
     ... 
    ] 

尝试使用此代码:

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; 
} 
+0

我试图现在来测试。分支:出现错误“缺少}”。我试图弄清楚。 – GoBeavs 2014-12-04 17:52:46

+0

谢谢Ragnar,我希望我能够投票10次,非常干净,比我的方法更简单。 – GoBeavs 2014-12-04 17:58:07

+0

谢谢@GoBeavs :) – Ragnar 2014-12-04 18:56:21