2017-05-12 5 views
0

私はこのAngularJSサービスを持っています。javascriptオブジェクトに動的に追加する際に重複するエントリをチェックする方法は?

demoService.getDemoData($scope.countEP).then(function (data) { 
       console.log(data); 
       for (var i = 0; i < data.length; i++) { 
        $scope.allEditorPicks.push(data[i]); 
       } 
      }); 

この場合、allEditorPicksは、コードの先頭に次のように定義した配列です。

$ scope.allEditorPicks = [];

私はこのアレイを使用していて、これらのデータを印刷するとき、配列に同じ項目があります。複製する。ですから、既存のアイテムをチェックしてallEditorPicks配列に追加する方法が必要です。これをforループの中で行う必要があります。 forループ内に別のループを追加して、allEditorPicks配列を読み込んでチェックしました。しかし、それはうまくいきません。

demoService.getDemoData($scope.countEP).then(function (data) { 
       console.log(data); 
       for (var i = 0; i < data.length; i++) { 
        for (var j = 0; j < $scope.allEditorPicks.length; j++) { 
         if ($scope.allEditorPicks[j].itemName == data[i].itemName) { 
          console.log("Item Exists") 
         } else { 
          $scope.allEditorPicks.push(data[i]); 
         } 
        } 
       } 
      }); 

これは私が試した解決策です。このコードを実行すると、ブラウザがフリーズして動作しなくなりました。私に解決策を教えてください。

+0

可能な重複[NG-繰り返しフィルタアウト重複結果の作り方](http://stackoverflow.com/questions/15914658/how-to-make- ng-repeat-filter-out-duplicate-results) – hurricane

答えて

0

最初に配列をitemNameでソートし、順序に従って複製を削除します。

data = data.sort(function(a,b){ 
return a.itemName - b.itemName; 
}); 

for (var i = 0; i < data.length; i++) { 
    if(data[i].itemName === data[i++].itemName){ 
     console.log("Item Exists"); 
    }else { 
     $scope.allEditorPicks.push(data[i]); 
    }   
} 
+0

こんにちは、仲間が良いです。あなたが私に与えたソートコードは動作していません。それを確認できますか?それは大きな助けです –

+0

あなたは完全なjsonを投稿することができます –

+0

{ビデオカテゴリ:2、 videoid:2134 videotitle: "Science&Tech 001"} –

0

これを試してみてください:

demoService.getDemoData($scope.countEP).then(function (data) { 
    for(let i = 0; i < data.length; i++){ 
    let found = $scope.allEditorPicks.find(elt => { 
     return elt.itemName === data[i].itemName; 
    }); 
    if(!found){ 
     $scope.allEditorPicks.push(data[i]); 
    } 
    } 
}) 
関連する問題