我需要递归地浏览对象树,直到找到匹配的元素并将一些数据推送到其中。这是我的结构的简化示例: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这个示例数组的用途。
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
currentNode.replies.length
如果currentNode.replies
未定义,则不能使用。你应该检查是否currentNode.replies
不是null
,会有点像这样:
if (currentNode.replies && currentNode.replies.length) { ...
编辑:同样适用于currentNode._id
,null
在调用之前检查它是否不是currentNode._id.equals
。
添加回答
举报
0/150
提交
取消