按照node.js中的内容对json进行排序

时间:2013-09-10 14:54:39

标签: arrays json node.js mongoose

我正在尝试将帖子添加到一系列主题并在json中发布,一切都很完美,但继承并没有做我想要的。

var topicArray = [],
    postArray = [];

// Create Topic and Post Array
topics.forEach(function(topic) {

    topicArray.push({
        "id": topic._id,
         "title": topic.title,
        "slug": topic.slug,
        "lastPost": topic.updatedAt,
        "posts": postArray
    });

    var posts = topic.posts;

    posts.forEach(function(post) {

        postArray.push({
            "id": post._id,
            "author": post.author,
            "body": post.body,
            "date": post.date,
            "edited": post.updatedAt
        });

    });
});

它总是将所有帖子添加到所有主题,而不是仅将帖子添加到父主题。它们是mongoose中的子文档,所以我认为如果它有效则是合乎逻辑的。因为它没有工作,我在帖子中添加了一个“主题”键,我在if中使用if只将帖子推送到数组,如果它们是相同的,就像这样:

if(topic.id == post.topic) {
    postArray.push({
        "id": post._id,
        "author": post.author,
        "body": post.body,
        "date": post.date,
        "edited": post.updatedAt
    });
}

但它最终只收到了任何帖子。我发现我用小写保存了它,所以我把它改成了

if(topic.id.toUpperCase() == post.topic) {
    postArray.push({
        "id": post._id,
        "author": post.author,
        "body": post.body,
        "date": post.date,
        "edited": post.updatedAt
    });
}

它最终让所有人再次......这个问题让我现在尝试了4个小时,我在这里错过了一些非常基本的东西,是吗?

1 个答案:

答案 0 :(得分:1)

您永远不会为主题创建新数组。因此,所有帖子都会插入到同一个数组中,该数组将分配给所有主题。

var topicArray = [];

// Create Topic and Post Array
topics.forEach(function(topic) {

    // create a new postArray for each topic
    var postArray = []

    topicArray.push({
        "id": topic._id,
         "title": topic.title,
        "slug": topic.slug,
        "lastPost": topic.updatedAt,
        "posts": postArray
    });

    var posts = topic.posts;

    posts.forEach(function(post) {

        postArray.push({
            "id": post._id,
            "author": post.author,
            "body": post.body,
            "date": post.date,
            "edited": post.updatedAt
        });

    });
});