首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在nodejs中创建树结构递归json &查询,其中id =5

如何在nodejs中创建树结构递归json &查询,其中id =5
EN

Stack Overflow用户
提问于 2014-11-14 20:33:39
回答 4查看 2.1K关注 0票数 1

我的文件夹结构表

代码语言:javascript
运行
复制
 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,请帮助。

EN

回答 4

Stack Overflow用户

发布于 2014-11-14 20:54:50

像这样的东西?

代码语言:javascript
运行
复制
{
  "1": {
      "name": "parent",
      "parent_id": 0
   },
  "2": {
     "name": "child",
     "parent_id": 1
  },
  "3": {
     "name": "grandchild a",
     "parent_id": 2
  }
}

编辑:或数组:

代码语言:javascript
运行
复制
[
    { "id": 1, "name": "parent", "parent_id": 0},
    { "id": 2, "name": "child",  "parent_id": 1}
    // and so on
]
票数 0
EN

Stack Overflow用户

发布于 2014-11-14 21:11:30

我想我会像这样构造树(在适当的地方使用id):

代码语言:javascript
运行
复制
{
     name: "parent"
     children: [
       {
          name: "child"
          children: [
             {
               name: "grandchild a"
              }   ,
             {
               name: "grandchild b"
              }   ,         
             {
               name: "grandchild c"
              }   
          ]   
        }
      ]
  }

您需要转换的Node内部的数据结构是什么?如果这是在DB表中,那么如何将其放入node中,以及一旦它在那里,它看起来是什么样子-您可以使用console.log(JSON.stringify(object,null 4))输出当前结构

票数 0
EN

Stack Overflow用户

发布于 2014-11-14 21:30:30

你为什么不这样做呢?

代码语言:javascript
运行
复制
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);
}

然后在代码中的某个位置执行以下操作:

代码语言:javascript
运行
复制
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“,您将能够通过methodchaining获得子目录;)非常面向对象的风格,但我认为这是一种很好的构建代码的方式

希望对你的特殊情况有所帮助

编辑:下面是一个链接你的子目录的方法的例子:

代码语言:javascript
运行
复制
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;
}

然后你可以这样做:

代码语言:javascript
运行
复制
rootDir.getSubDirByName('parent').getSubDirByName('child').getSubDirByName('grandchild A');

或者类似的东西:) -crazy

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26930142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档