Javascript 构建多级注释系统的JSON数据

Javascript 构建多级注释系统的JSON数据,javascript,json,Javascript,Json,我有一个用于多级注释系统的JSON数据,如下所示: [{ "thread_id": 2710, "parent_id": "", "username": "string", "comment": "string", "postdate": "2017-06-09T07:12:32.000Z", "id": 1 }, { "thread_id": 2710, "parent_id": "1", "username": "string2", "comment"

我有一个用于多级注释系统的JSON数据,如下所示:

[{
  "thread_id": 2710,
  "parent_id": "",
  "username": "string",
  "comment": "string",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 1
}, {
  "thread_id": 2710,
  "parent_id": "1",
  "username": "string2",
  "comment": "string2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 2
}, {
  "thread_id": 2710,
  "parent_id": "",
  "username": "string32",
  "comment": "strin2g2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 3
}, {
  "thread_id": 2710,
  "parent_id": "",
  "username": "str23ing32",
  "comment": "strrgein2g2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 4
}, {
  "thread_id": 2710,
  "parent_id": "3",
  "username": "str2rr3ing32",
  "comment": "strr@gein2g2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 5
}, {
  "thread_id": 2710,
  "parent_id": "3",
  "username": "str2ergergrr3ing32",
  "comment": "strr@geinergerg2g2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 6
}, {
  "thread_id": 2710,
  "parent_id": "6",
  "username": "str2ergrrrgergergrr3ing32",
  "comment": "strr@geiergergernergerg2g2",
  "postdate": "2017-06-09T07:12:32.000Z",
  "id": 7
}]
如何使用javascript构建类似于bottom的响应

{ id: 1
  parent_id: "",
  ....,
  comments: [
   {
    id: 12,
    parent_id: 1,
    comments: [{ parent_id: 12 ....}]
   }
  ]

您可以使用标准算法构建带有单个循环的树,其中对于任何
id
parent\u id
节点,都会创建并连接一个节点

var data=[{thread\u id:2710,parent\u id:”,用户名:“string”,注释:“string”,postdate:“2017-06-09T07:12:32.000Z”,id:1},{thread\u id:2710,parent\u id:“1”,用户名:“string2”,注释:“string2”,postdate:“2017-06-09T07:12:32.000Z”,id:2},{thread id:2710,parent\u id:”,用户名:“string32”,注释:“strin2g2”,postdate:“2017-06-09T07:12:32.000Z”,id:3},{thread_id:2710,parent_id:”,用户名:“str23ing32”,注释:“strgein2g2”,发布日期:“2017-06-09T07:12:32.000Z”,id:4},{thread_id:2710,parent_id:“3”,用户名:“str23ing32”,注释:strr@gein2g2,发布日期:“2017-06-09T07:12:32.000Z”,id:5},{thread_id:2710,parent_id:“3”,用户名:STR2ERGRR3ING32“,评论:strr@geinergerg2g2,发布日期:“2017-06-09T07:12:32.000Z”,id:6},{thread_id:2710,parent_id:“6”,用户名:“str2ergrrrgrr3ing32”,注释:strr@geiergergernergerg2g2,发布日期:“2017-06-09T07:12:32.000Z”,id:7}],
树=函数(数据,根){
var r=[],
o={};
data.forEach(函数(a){
var comments=o[a.id]&&o[a.id]。注释;
如果(评论){
a、 评论=评论;
}
o[a.id]=a;
if(a.parent_id==根){
r、 推(a);
}否则{
o[a.parent_id]=o[a.parent_id]|{};
o[a.parent_id]。注释=o[a.parent_id]。注释| |[];
o[a.parent\u id].comments.push(a);
}
});
返回r;
}(数据),;
console.log(树);

作为控制台包装{max height:100%!important;top:0;}
除非您描述,否则您的预期输出没有多大意义it@ShubhamKhatri这些评论都属于一个线程,我试图创建一个类似hackernews的评论系统。@JaromandaX我直接尝试了filter/reduce和for循环…显然我被绊住了…说““我试过了”很简单-显示你试过的代码表明你确实试过了:p