如何动态添加到JavaScript对象时检查重复的条目?

时间:2017-05-12 14:35:32

标签: javascript angularjs arrays

我有这个AngularJS服务。

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]);
                        }
                    }
                }
            });

这是我尝试的解决方案。当我运行此代码时,我的浏览器冻结并停止工作。请给我一个解决方案。

2 个答案:

答案 0 :(得分: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]);
   }           
}

答案 1 :(得分: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]);
   }
  }
})