如何只执行一次javascript命令

时间:2014-08-02 05:51:10

标签: javascript arrays angularjs

我有一个函数调用HTTP Request GET来比较给定值,以检查它是否匹配数组中的任何元素。如果没有匹配,我想把这个给定的值放到一个数组中,但我的问题是,因为我循环遍历许多元素,所以当我需要它来显示一个时,我在数组中得到重复。这是我的代码:

 $scope.fetchParcel = function()
     {

    $http({
            method: 'GET',
            url: '/infiniti/' + $scope.infinitiId, 
        })
        .success(function(a){

            angular.forEach($scope.parcels, function(parcel, key){
                    angular.forEach(parcel, function(par){


                        if(par == $scope.shipper_ref_no){
                            $scope.scans.push(parcel);
                            $scope.checked++;

                            $scope.parcels.splice(key, 1);

                        }
                        if(par != $scope.shipper_ref_no){
                            $scope.excludeds.push($scope.shipper_ref_no);
                        }


                    });

            });

        });

}

在它的最后一部分$scope.excludes.push($scope.shipper_ref_no);它是正确的,它将shipper_ref_no存储到数组中,但由于数组中有三个元素,它实际上存储了shipper_ref_no三次,当我只需要它存储一次后检查发现它不匹配任何元素。我该如何做到这一点?

数组示例:

 [
 -{
    id: 1
    t: "1122"
    srn: "23"
  }
 -{
    id: 2
    t: "234"
    srn: "23"
  }
 -{
    id: 3
    t: "dd"
    srn: "44"
  }
 ]

如果我的输入是说“444kkkddd”显然没有任何元素的匹配,所以它放入我的数组444kkkddd 9次..我只需要它存储一次。不要误会我的意思,我知道它为什么要打印9次,但我只需要一个解决方案就可以打印一次。我遇到了一个残局。

1 个答案:

答案 0 :(得分:1)

您可以保留已添加ID的列表:

var addedIds = {};

if(par != $scope.shipper_ref_no){
    if (!addedIds[$scope.shipper_ref_no]) {
        addedIds[$scope.shipper_ref_no] = true;
        $scope.excludeds.push($scope.shipper_ref_no);
    }
}