我正在触发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