2016-11-29 3 views
1

私は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()がトリガーするたびにデータが複製されないようにする方法はありますか?

私は以下のコードのようなものを試しましたが、まだ要素を複製しています。

+0

レスポンスアイテムに固有のIDがありますか?もしそうなら、それを使用して配列にプッシュする前に重複する項目を除外することができます – anu

+0

ええ、それを正しくフィルタリングする方法の例を示すことができますか? (要素)はオブジェクト全体であるため、各オブジェクトは一意の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

リクエストされたサンプルコードが追加されました。 –

関連する問題