使用JSON递归
问题描述:
我正在尝试编写一个采用平面数据格式的函数,该数据格式使用ID和parentId来建立关系。我知道我需要使用递归,但我需要帮助了解如何在特定的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;
}
我试图现在来测试。分支:出现错误“缺少}”。我试图弄清楚。 – GoBeavs 2014-12-04 17:52:46
谢谢Ragnar,我希望我能够投票10次,非常干净,比我的方法更简单。 – GoBeavs 2014-12-04 17:58:07
谢谢@GoBeavs :) – Ragnar 2014-12-04 18:56:21