2016-11-29 115 views
1

我正在触发setInterval()上的函数,基本上每30秒触发一次HTTP GET调用,但每次触发它时都会重复数据,因为它们被推入阵列。Angular2使用setInterval()避免.push中元素的重复()

for()的想法是找到每个objects状态为AwaitingPicking and AwaitingCollection,然后将它们推送到它们各自的array

private awaitingPicking: any = []; 
private awaitingCollection: any = []; 

constructor(private sharedService: SharedService, private http: Http) { 
    setInterval(() => { 
     this.getOrdersFromOrigin(); 
    }, 10000); 
    } 

getOrdersFromOrigin() { 
    this.isLoading = true; 
    this.sharedService.getOriginSite() 
     .subscribe(data => { 
     this.isLoading = false; 

     for (var i = 0; i < data.Results.length; i++) { 
      var element = data.Results[i]; 
      if (element.OrderLineGroups[0] && element.OrderLineGroups[0].Status == 'AwaitingPicking') { 
       this.awaitingPicking.push(element); 
      } else if (element.OrderLineGroups[0] && element.OrderLineGroups[0].Status == "AwaitingCollection") { 
      this.awaitingCollection.push(element); 
      } 
     } 

     }, 
     err => { 
     this.isLoading = false; 
     }); 
    } 

有没有一种方法可以防止每次触发setInterval()时都会复制数据?

我尝试了类似下面的代码,但它仍然复制元素。

if(this.awaitingPicking.indexOf(element) === -1){ 
    this.awaitingPicking.push(element); 
} 
+0

你的回复物品是否有任何唯一的ID?如果是,那么你可以使用它来过滤掉重复的项目,然后再推入数组 – anu

+0

是的,可以举例说明如何正确过滤它? (element)是一个完整的对象,因此每个objs都有唯一的id。 – MrNew

+0

按照[这篇文章](http://stackoverflow.com/questions/30735465/how-can-i-check-if-the-array-of-objects-have-duplicate-property-values)看看如何消除数组中的重复对象。你需要从你的对象中使用一些唯一的字段,虽然 – anu

回答

1

如果该元素不存在,则仅推送到“awaitingPicking”和“awaitingCollection”数组。见例如the answer to this question的一种方式来做到这一点(你需要重新打开打字稿课程)。

例如,您可以添加类似以下到您的类(你还需要实现这为awaitingCollection):

private pushAwaitingPickingIfNew(element: any): void { 
    if(!this.awaitingPicking.some(a => a == element)) { 
     this.awaitingPicking.push(element); 
    } 
} 

,然后更换

this.awaitingPicking.push(element) 

this.pushAwaitingPickingIfNew(element); 
+0

当然这适用于“awaitingCollection”数组。为了清楚起见,我会更新答案。 –

+0

添加一些代码到您的文章。此处不鼓励“仅限链接”帖子 – anu

+0

按要求添加示例代码。 –