/* comment */ comment = { _id: "itsid" _rev : "", link_id: "id of item you comment", parent: "id of parent"n children: "comment children", } /* map function */ function(doc) { if (doc.kind == "comment") { emit(doc.link_id, doc); } } /* reduce */ function (key, values) { var idx_comments = {}; var comments = []; for (var i=0; i 0) { for (var j=0; j0) { comment['thread'] = iter_comments(thread); } else { comment['thread'] = null; } } lcomments[i] = comment } return lcomments; } tmp = iter_comments(comments); return tmp; } /* rereduce */ function(key, values) { function cmp(a, b) { if (a['created'] > b['created']) return true; return false; } function swap(arr, i, j) { var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } function partition(arr, start, end, pivot) { var pval = arr[pivot]; swap(arr, pivot, end--); while (start < end) { if (cmp(arr[start], pval) { swap(arr, start, pivot); pivot++; } } swap(arr, pivot, end+1); return pivot; } function qsort(arr, start, end) { if (start < end) { var pivot = partition(arr, start, end, start); qsort(arr, start, pivot); qsort(arr, pivot+1, end) } } function iter_comments(comments) { qsort(comments, 0, comments.length-1); for (var i=0; i1) comment['thread'] = iter_comments(comment['thread']); comments[i] = comment; } return comments; } return iter_comments(values); }