Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角块重复自身_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角块重复自身

Javascript 角块重复自身,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个功能,可以通过滚动页面将项目推送到数组中,但问题是推送的项目是重复的,而不是推送新项目 代码 onScroll():void{ console.log('scrolled'); var i,j,newArray,chunk=10; 对于(i=0,j=this.listOfData.length;i由于每次函数执行时,i值将设置为0,chunk为10,它将始终从数组中切出相同的块。这就是为什么会有重复数据 如果出现混淆,则不修改原始数组 在这种情况下,请将代码更改为: onScroll()

我有一个功能,可以通过滚动页面将项目推送到数组中,但问题是推送的项目是重复的,而不是推送新项目

代码
onScroll():void{
console.log('scrolled');
var i,j,newArray,chunk=10;

对于(i=0,j=this.listOfData.length;i由于每次函数执行时,
i
值将设置为0,
chunk
为10,它将始终从数组中切出相同的块。这就是为什么会有重复数据

如果出现混淆,则不修改原始数组

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

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);
      }
}
onScroll():void{
console.log('scrolled');
var i,j,newArray,chunk=10;

对于(i=0,j=this.listOfData.length;i由于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);
          }
       }
onScroll():void{
console.log('scrolled');
var索引,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
你到底想达到什么目的?我推荐了splice,因为这似乎是你想要做的。如果你能更好地解释你的问题,我可能会给出更好的解决方案。k,
问题
记得我说过我的
19到10(重复)
?现在它们不再重复,也不会打印
9到1
。它只会在第一次加载时停止。
我想要的
在第一次加载时显示
19到10
,当我向下滚动时,将
9到1
添加到
19到10
中,这样我就有了完整的列表
19到1
,如果你的数据有(比如说)该怎么办35个项目。你想在向下滚动一次时显示全部35个项目还是在下一个10个项目时显示?@mafortis它应该显示如下:
10-10-10-5
它加起来很难理解确切的场景。你能添加一个stackblitz吗?@JinsThomasShaji这对我的数据api来说很难,但我会为你做视频拍摄。@JinsThomasShaji updaTED观看了视频。这种行为的原因很多。如果你能提供更多的上下文,效果会更好。你可以简单地使用一些模拟或硬编码数据而不是API在stackbltz中复制。这样就很容易找到确切的原因并解决问题。哇!喜欢它:D我可以问一下这是什么意思吗?
这个。结果。长度-1
为什么
-1
?这标识了This.result数组中已经存在的元素数。因此,第一次加载时
-1
等于
10
,第一次滚动后等于
20
?这是因为数组的索引从0开始。数组中的第11个元素将在arr[10]处找到。
       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);
          }
       }