2016-11-29 31 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

按要求添加示例代碼。 –