我的文件夹结构表
id | name | parent_id
----+--------------+-----------
1 | parent |
2 | child | 1
3 | grandchild A | 2
4 | grandchild B | 2
5 | grandchild c | 3
select id,parent_id, name from table.
我想为此结果集创建一个json
,它应该是树结构。
如何为此制作一个json,
请帮忙。
答案 0 :(得分:0)
这样的东西?
{
"1": {
"name": "parent",
"parent_id": 0
},
"2": {
"name": "child",
"parent_id": 1
},
"3": {
"name": "grandchild a",
"parent_id": 2
}
}
编辑:或数组:
[
{ "id": 1, "name": "parent", "parent_id": 0},
{ "id": 2, "name": "child", "parent_id": 1}
// and so on
]
答案 1 :(得分:0)
我想我会像这样构建树(在适当的地方使用id):
{
name: "parent"
children: [
{
name: "child"
children: [
{
name: "grandchild a"
} ,
{
name: "grandchild b"
} ,
{
name: "grandchild c"
}
]
}
]
}
您需要转换的Node内部的数据结构是什么?如果这是在一个数据库表中,那么你如何将它带入节点,一旦它在那里它会是什么样子 - 你可以使用console.log(JSON.stringify(object,null 4))来输出当前结构
答案 2 :(得分:0)
为什么不这样做:
function Directory(p_id, p_name){
this.name = p_name;
this.id = p_id;
this.subdir = [];
}
Directory.prototype.addSubDir(p_directory){
this.subdir.push(p_directory);
}
然后代码中的某处执行此操作:
var arr_struc = ...;//[your data]
var dir_mem = [];
var rootDir = new Directory(0, 'ROOT')
dir_mem.push(rootDir);
for(var i = 0; i < arr_struc.length; i++){
var tmp_directory = new Directory(i+1, arr_struc[i].name)
dir_mem.push(tmp_directory);
if(!arr_struc[i].parent_id)
{ rootDir.addSubDir(tmp_directory) }
else
{ dir_mem[arr_struc[i].parent_id].addSubDir(tmp_directory) }
}
添加一些其他方法来通过ID或simular读取子目录并返回“this”你可以通过方法链接获得子目录;)漂亮的OO样式但我认为它是一种很好的结构代码方法
希望它在您的特殊情况下有所帮助
编辑: 这是一个方法链接你的子目录的例子:
Directory.prototype.getSubDirs(){
return this.subDir;
}
Directory.prototype.getSubDirById(p_id){
var allSubDirs = this.getSubDirs();
for(var i = 0; i < allSubDirs.length; i++){
if(allSubDirs[i].id === p_id) return allSubDirs[i];
}
return false;
}
Directory.prototype.getSubDirByName(p_name){
var allSubDirs = this.getSubDirs();
for(var i = 0; i < allSubDirs.length; i++){
if(allSubDirs[i].name === p_name) return allSubDirs[i];
}
return false;
}
然后你可以这样做:
rootDir.getSubDirByName('parent').getSubDirByName('child').getSubDirByName('grandchild A');
或类似的东西:) -crazy
答案 3 :(得分:0)
在我为卢旺达非政府组织Solid Africa工作的项目中,树木结构是跟踪费用和捐赠的重要部分(您的费用或捐赠属于某一类别,食品,特殊护理等)。根据这一经验,我开发了tree-util node package。
要获得包含一些方便方法的树结构,请执行以下操作:
使用以下命令安装软件包: npm install tree-util
您需要将数据表示为json。 如果它是数据库中的表,则使用节点包进行简单选择 以json的形式获取数据。
根据从db加载的json数据构建树。一个更通用的示例可以在下面,但可以通过将items数组更改为从表中加载的数据并将配置的parentid属性设置为'parent_id'来进行调整
var tree_util = require('tree-util')
// An array where the items has a parent child reference using id properties
var items = [{ id : 1 }, { id : 2, parentid : 1 }, { id : 3, parentid : 1 },
{ id : 4, parentid : 1 }, { id : 5, parentid : 3 }];
// Config object to set the id properties for the parent child relation
var standardConfig = { id : 'id', parentid : 'parentid'};
// Creates an array of trees. For this example there will by only one tree
var trees = tree_util.buildTrees(items, standardConfig);