我需要递归地浏览对象树,直到找到匹配的元素并将一些数据推送到其中。这是我的结构的简化示例:
post.comments = [
{
_id: a,
content: 'Foo',
replies: [
{
_id: aa,
content: 'Foobar',
replies: [
{
_id: aaa,
content: 'Foobarbaz',
replies: [...]
}
]
},
{
_id: ab,
content: 'Barfoo',
replies: [...]
}
]
},
{
_id: b,
content: 'Bar',
replies: [...]
},
{
_id: c,
content: 'Bar',
replies: [...]
},
...
]
理论上,回复可以无限嵌套。
这是我的递归函数:
function findNode(comments, id, data) {
for (let key in comments) {
currentNode = comments[key]
if (currentNode._id.equals(id)) {
currentNode.replies.push(data)
break;
} else {
if (currentNode.replies.length) {
findNode(currentNode.replies, id, data)
}
else {
continue;
}
}
}
}
findNode(post.comments, id, comment)
这个函数似乎只读取第一个注释对象的子节点,然后当它到达一个没有子节点的节点时以“无法读取未定义的属性“等于”退出(但我认为continue;应该将它从那个树?)
我不知道 for 循环和递归是什么?
编辑:对不起!string.equals(id)来自 Mongoose - 它相当于string == id这个示例数组的用途。
慕工程0101907
相关分类