私はsetInterval()
の関数をトリガーしていますが、HTTP GET
は30秒ごとに呼び出されますが、トリガーするたびにデータが重複してアレイ。Angular2はsetInterval()で.push()の要素の重複を防ぎます
for()
のアイデアは、AwaitingPicking and AwaitingCollection
のステータスを持つすべてのobjects
を見つけ、次に対応する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()
がトリガーするたびにデータが複製されないようにする方法はありますか?
私は以下のコードのようなものを試しましたが、まだ要素を複製しています。
レスポンスアイテムに固有のIDがありますか?もしそうなら、それを使用して配列にプッシュする前に重複する項目を除外することができます – anu
ええ、それを正しくフィルタリングする方法の例を示すことができますか? (要素)はオブジェクト全体であるため、各オブジェクトは一意のIDを持ちます。 – MrNew
削除する方法を確認するには[この記事を読む](http://stackoverflow.com/questions/30735465/how-can-i-check-if-the-array-of-objects-have-duplicate-property-values)配列からオブジェクトを複製します。あなたはオブジェクトからのユニークなフィールドを使用する必要がありますが – anu