开发者问题收集

使用 for 循环崩溃的过滤按钮

2019-12-09
46

我有一个只允许立即购买的过滤按钮,用于过滤允许该选项的列表。现在,使用下面代码中的 for 循环,单击按钮时应用程序会崩溃。如果我删除 for 循环,它不会崩溃。我不太明白崩溃的原因,因为我循环正确。至少我认为我是这样的。有人发现我的代码有问题吗?beforeCurrentFilter 应该在单击按钮之前重置过滤器。我总共有 3 个过滤器,所以如果选择了多个过滤器,我认为它应该会恢复。

filteredPosts: any[] = [];
posts: any[] = [];
beforeCurrentFilter: any[] = [];



      buyItNowFilter() {

        if (this.buyItNowStatus) {
          this.buyItNowStatus = false;
          console.log("ITS TRUE");

          return;
        }
        if (!this.buyItNowStatus) {
          console.log("its false");
          this.beforeCurrentFilter = this.filteredPosts;

          this.buyItNowStatus = true;

          for (let i = 0; i < this.posts.length; i++) {
            if (this.posts[i].auctionType !== "Not Available") {
              console.log("LISTING HERE");
              console.log(this.posts[i]);
              this.filteredPosts.push(this.posts[i]);
            }
          }
          this.posts = this.filteredPosts;
        }
      }
1个回答

您可以重构您的代码使其看起来像这样,它应该可以解决您的问题,如果您使用 Array.filter 方法,您可以消除 for 循环的使用

buyItNowFilter() {
  if (this.buyItNowStatus) {
    this.buyItNowStatus = false;
    console.log('it\'s true');
    return;
  } else {
    console.log('it\'s false');
    this.beforeCurrentFilter = this.filteredPosts;
    this.buyItNowStatus = true;

    this.filteredPosts = this.posts.filter(x => x.auctionType !== 'Not Available');
    this.posts = this.filteredPosts;
  }
}
Smokey Dawson
2019-12-09