0

我有一个问题,每次我提交帖子时,我的数组都呈指数级增长。我认为它发生在第二个 observable 中,因为在每个帖子之后都会更新用户对象,以更新他们上次更新帖子的时间戳。

我正在尝试检查内部 observable 是否该帖子已经在数组中,以防止将重复项插入到数组中。由于某种原因,这不起作用。

 loadPosts(url: string) {
    switch (url) {
        case '/timeline/top':
            this.postsService.subscribeAllPosts(this.selectedArea)
                .subscribe(posts => {
                    let container = new Array<PostContainer>();
                    for (let post of posts) {
                        this.getEquippedItemsForUsername(post.username).subscribe(x => {
                                try {
                                    if (container.indexOf(new PostContainer(post, x[0].equippedItems)) === -1) {
                                        container.push(new PostContainer(post, x[0].equippedItems));
                                    }
                                     console.log( container); // grows exponentially after each submitted post
                                } catch (ex) { }
                            }
                        );
                    }
                    this.postContainers = container; // postContainers is the array that is being looped over in the html.
                });
            break;
   }

}
4

2 回答 2

3

我不确定您对这个问题是否正确,从您的帖子中删除重复项会很容易,如下所示:

this.postsService.subscribeAllPosts(this.selectedArea)
            .distinct()
            .subscribe(posts => {
                ...
            });
于 2016-12-14T19:54:19.873 回答
2

您的问题是,通过创建一个PostContainer新对象,您正在创建一个不在 in 中的新对象container,因此它将添加每个postin posts

相反,您应该检查post的任何项目中是否不存在某些唯一值container

就像是:

if (container.findIndex((postContainer) => postContainer.id === post.id) === -1) {
    continer.push(new PostContainer(post, x[0].equippedItems));
}
于 2016-12-14T19:52:04.730 回答