我正在觸發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);
}
你的回覆物品是否有任何唯一的ID?如果是,那麼你可以使用它來過濾掉重複的項目,然後再推入數組 – anu
是的,可以舉例說明如何正確過濾它? (element)是一個完整的對象,因此每個objs都有唯一的id。 – MrNew
按照[這篇文章](http://stackoverflow.com/questions/30735465/how-can-i-check-if-the-array-of-objects-have-duplicate-property-values)看看如何消除數組中的重複對象。你需要從你的對象中使用一些唯一的字段,雖然 – anu