如何只执行一次javascript命令
我有一个函数调用HTTP请求GET来比较给定的值,以检查它是否匹配数组中的任何元素。如果没有匹配项,我想将给定的值放入数组中,但我的问题是,由于我循环了许多元素,所以当我只需要在数组中显示一个元素时,我会在数组中得到重复项。这是我的密码:如何只执行一次javascript命令,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有一个函数调用HTTP请求GET来比较给定的值,以检查它是否匹配数组中的任何元素。如果没有匹配项,我想将给定的值放入数组中,但我的问题是,由于我循环了许多元素,所以当我只需要在数组中显示一个元素时,我会在数组中得到重复项。这是我的密码: $scope.fetchParcel = function() { $http({ method: 'GET', url: '/infiniti/' + $scope.infinitiId,
$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\u ref\u no)代码>它将shipper\u ref\u no存储到数组中是正确的,但是由于数组中有三个元素,因此当检查发现shipper\u ref\u no与所有元素都不匹配时,它实际上会将shipper\u ref\u no存储三次。我如何做到这一点
阵列的示例:
[
-{
id: 1
t: "1122"
srn: "23"
}
-{
id: 2
t: "234"
srn: "23"
}
-{
id: 3
t: "dd"
srn: "44"
}
]
如果我的输入是“444kkkdd”,显然任何元素都不匹配,所以它将444kkkdd放入数组9次。我只需要它存储一次。别误会,我知道为什么要打印9次,但我只需要一个解决方案就可以打印一次。我遇到了麻烦。您可以保留添加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);
}
}
你能给我一个完美的普朗凯拉吗。我早就该想到这个解决办法了。我可能需要一些Z来给我的大脑充电哈哈谢谢!嗯,奇怪。即使条件检查是否存在匹配的元素,不将其推入数组,它也会将所有数据推入数组$scope.shipper\u ref\u不包含哪种类型的值?一个字符串?你能用console.log addedis来确保你的数据被正确存储吗?另外,在那里抛出toLowerCase()可能会更好,以避免任何大小写不匹配$scope.shipper\u ref\u no
是一个字符串。我给addedId做了一个控制台日志,数据被正确存储。