背景
一个多层嵌套评论回复的场景,但是孤儿后端,把所有的回复数据,放到一个数组里返回给我,只有一层,我要给数据转换成原先的多层嵌套的模式。
数据结构如下:
//commitId是最外层的评论ID
//id是每条回复自己的ID
//replyId是回复父级的Id
replyMsg表示回复内容这里我表示层级
//现在要把每个子级回复放到父级回复的child里面
//commitId是最外层的评论ID
//id是每条回复自己的ID
//replyId是回复父级的Id
//现在要把每个子级回复放到父级回复的child里面
let data = [
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "da642ba6-52b2-4965-bf39-c21f8f2ceaf0",
replyId: "fb0a7604-68cb-45c7-b149-99dceb5a6004",
replyMsg: "1-1-1",
child: []
},
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "e5def846-c747-496b-9ab8-270655bc269b",
replyId: "a583dd34-ff71-44dd-9eaa-5b753501b9a6",
replyMsg: "2-1",
child: []
},
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "a583dd34-ff71-44dd-9eaa-5b753501b9a6",
replyId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
replyMsg: "2",
child: []
},
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "9de4bb96-16e5-4570-b03f-60ac2beb8965",
replyId: "f7788b92-66cf-4463-ac44-5da0fcd95aa0",
replyMsg: "1-2",
child: []
},
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "fb0a7604-68cb-45c7-b149-99dceb5a6004",
replyId: "f7788b92-66cf-4463-ac44-5da0fcd95aa0",
replyMsg: "1-1",
child: []
},
{
commentId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
id: "f7788b92-66cf-4463-ac44-5da0fcd95aa0",
replyId: "5786ea2a-7921-4d2e-bb1e-fc8ddb69d2b4",
replyMsg: "1",
child: []
}
]
看到这个场景,第一时间想到的就是递归。
但是逻辑想了很久才想出来。
其实很简单,想不通,想死了都想不出来。
想通了就很简单。
function Recursion(id) {
let arr = []
for(let i = 0;i<data.length;i++) {
if(data[i].replyId === id){
arr.push(data[i])
data[i].child = Recursion(data[i].id)
}
}
return arr
}
如下