我正在通过投票排序评论线程。我有一个看起来像这样的基础对象。
{
"user_name": "string",
"comment": "string",
"points": "integer",
"date_time": "dateObject",
"avatar_pic": "URL",
"profile_link": "URL"
}
你现在可以忽略一切都是字符串的事实。只是这样做进行测试。
这是包含多个注释的较大对象。将有一个未知的嵌套深度。
{
"comments": [
{
"user_name": "string",
"comment": "string",
"points": "integer",
"date_time": "dateObject",
"child": [
{
"user_name": "string",
"comment": "string",
"points": "integer",
"date_time": "dateObject",
"child" : null,
}
]
},
{
"user_name": "string",
"comment": "string",
"points": "integer",
"date_time": "dateObject",
"child": null
}
]
}
我现在在psudo代码中的工作理论是这样的。
for each iteration of loop over comments array call someFunction
someFunction(){
for by points
write properties of object to screen
check if child property has an array. If array call someFunction on that array.
}
基本上for循环会自动检查嵌套。然后,如果它进一步向下循环并继续在屏幕上按逻辑顺序构建注释。我想要记住的唯一其他要求是嵌套深度。我想根据它们的嵌套级别缩进评论。最多3或4个缩进,然后它们将直接向下而不是在页面上进一步缩进。
更大的格式是完全灵活的。如果有更好的数据结构可供使用我就是全部。我希望这是有道理的,你们摇滚!!
答案 0 :(得分:1)
如果我理解你正在尝试做什么,你的伪代码将如下所示:
someFunction(){
if child property has an array -> call someFunction()
else child property has null -> process, and then set this very child to null, and call someFunction again
}
为了更好地监督这些类型的对象遍历,你应该看看graphs以及一种特殊的方法来遍历它们Depth First Search,这与我理解你想做的事情非常接近
答案 1 :(得分:0)
如果您需要嵌套注释,IMO结构很好。如果你不这样做,拥有它不会吃太多资源。我建议在将其打印到html时保存每个注释深度,然后您可以根据需要设置样式。
答案 2 :(得分:0)
function process (obj, func) {
func(obj);
if (obj.child) {
obj.child.forEach(function (child) {
process(child, func);
});
}
}
用法:
process(yourObj, function (obj) {
// e.g.
cosnole.log(obj.user_name);
});