1

我有通过滚动页面将项目推送到数组的功能,但问题是推送的项目正在重复而不是推送新项目。

代码

onScroll(): void {
      console.log('scrolled');
      var i,j,newArray,chunk = 10;
      for (i=0,j=this.listOfData.length; i<j; i+=chunk) {
          newArray = this.listOfData.slice(i,i+chunk);
          this.results = this.results.concat(newArray);
      }
}

我的this.listOfData数组有 19 个项目,它只有 19 到 10(重复)9 到 1 永远不会显示。

此代码的来源

任何想法?

更新

如果你很难理解我的观点,我会记录我的问题的小视频观看

4

2 回答 2

1

由于 Aditya 在上述答案中提到的问题,您的代码失败了。像这样更改您的代码:

       onScroll(): void {
          console.log('scrolled');
          var index,newArray,chunk = 10;
          if(this.result.length == 0){
              newArray = this.listOfData.slice(0,chunk);
              this.results = this.results.concat(newArray);
          }
          else if(this.results.length < this.listOfData.length){
             index=this.result.length-1;
             newArray = this.listOfData.slice(index,index+chunk);
             this.results = this.results.concat(newArray);
          }
       }
于 2020-11-25T06:26:37.430 回答
0

因为每次你的函数执行你的i值都会被设置为 0 并且chunk是 10,它总是会从你的数组中切出相同的块。这就是为什么你有重复数据。

Array.prototype.slice不会修改原始数组,如果这是引起混淆的地方。

在这种情况下,将您的代码更改为:

onScroll(): void {
      console.log('scrolled');
      var i,j,newArray,chunk = 10;
      for (i=0,j=this.listOfData.length; i<j; i+=chunk) {
          newArray = this.listOfData.splice(i,i+chunk);
          this.results = this.results.concat(newArray);
      }
}

Array.prototype.splice将从原始数组中删除块并返回删除的块。

于 2020-11-25T05:01:53.513 回答