0

トピックの配列に投稿を追加して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
        });

    });
});

親トピックのみに投稿を追加するのではなく、常にすべての投稿をすべてのトピックに追加します。それらはマングースのサブドキュメントなので、うまくいけば論理的だと思いました。うまくいかなかったので、投稿に「トピック」キーを追加しました。次のように、投稿が同じ場合にのみ投稿を配列にプッシュする場合にのみ使用しました。

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時間試行錯誤し続けています。ここで本当に基本的なものが欠けていますか?

4

1 に答える 1

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
        });

    });
});
于 2013-09-10T14:57:20.953 に答える