Если я правильно понимаю, каждый комментарий может иметь от 0 до n ответов, которые также являются комментариями, которые могут содержать от 0 до n ответов и т. Д.
Поэтому вам нужна рекурсивная функция, которая вызывается для каждогокомментарий, независимо от его глубины относительно исходного сообщения, но отслеживает эту глубину.
Это должно выглядеть примерно так:
function findReplies ( comment:commentVO, depth:int = 0) : String {
var output:String = formatComment (comment, depth);
for each ( var reply : commentVO in comment.replies ) {
output += findReplies ( reply, depth + 1);
}
return output;
}
Вам не нужно использовать счетчикпеременная;цикл for each
будет выполняться только в том случае, если в массиве есть содержимое.Вы вызываете этот метод для комментария верхнего уровня и, если хотите, вы можете отслеживать все дерево сразу, вместо вызова трассировки в теле функции, например:
trace ( findReplies (topComment) );
Реализация formatComment()
чтобы вывод был хорошо отформатирован.Например:
function formatComment ( comment:commentVO, depth:int ) : String {
var output:String = depth > 0 ? " " : "- ";
var i:int = -1;
while (++i < depth) output+= " ";
output += "Comment ";
if ( depth > 0 ) output += "reply ";
output += "at depth "+depth+":";
output += comment.raw_message;
output += "\n";
return output;
}
вернет:
- Comment at depth 0: {text}
Comment reply at depth 1: {text}
Comment reply at depth 2: {text}
Comment reply at depth 1: {text}
Comment reply at depth 1: {text}
Comment reply at depth 1: {text}
Comment reply at depth 2: {text}
Comment reply at depth 3: {text}
Comment reply at depth 3: {text}