Javascript 构建多级注释系统的JSON数据
我有一个用于多级注释系统的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"
[{
"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