早上好,
我想将新项目推送到数组(我们可以做),但在推送检查重复项之前,以防止重复数组中的项目。
我已尝试过此 example ,但未成功我无法使用我们的代码。
如果有人知道更好的解决方案,或者可以看到我们出错的地方,请尽快告诉我们。 谢谢。
** JS **
$scope.Products = $scope.$storage.Products == undefined ? [] : $scope.$storage.Products;
$scope.logItem = function($index, brandName, partNumber, productName, amount) {
$scope.newItem = {
Brand: brandName,
Part: partNumber,
Product: productName,
Amount: amount
};
var duplicateItem = $scope.Products.reduce(function(previous, i) {
if ($scope.newItem === i) return true;
return previous
}, false);
if (duplicateItem) {
alert("Already Logged");
} else {
alert("Item Logged");
$scope.Products.push($scope.newItem);
$scope.$storage.Products = $scope.Products;
}
}
** FIX **
$scope.Products = $scope.$storage.Products == undefined ? [] : $scope.$storage.Products;
$scope.logItem = function($index, brandName, partNumber, productName, amount) {
$scope.newItem = {
Brand: brandName,
Part: partNumber,
Product: productName,
Amount: amount
};
var isDuplicate = false;
$scope.Products.forEach(function(element) {
if (JSON.stringify(element) === JSON.stringify($scope.newItem)) {
isDuplicate = true;
return false;
}
});
if (!isDuplicate) {
alert("Item Logged");
$scope.Products.push($scope.newItem);
$scope.$storage.Products = $scope.Products;
} else {
alert("Already Logged");
};
}
答案 0 :(得分:5)
像这样的东西
$scope.Products.forEach(function (element) {
if (JSON.stringify(element) === JSON.stringify($scope.newItem)) {
isDuplicate = true;
return false;
}
});
答案 1 :(得分:3)
您可以随时检查推送到阵列是否安全。
if ($scope.ITEMS.indexOf(ITEM) == -1) {
// SAFE
$scope.ITEMS.push(ITEM);
}
答案 2 :(得分:1)
http://jsfiddle.net/u8Fuk/24/。
您可以使用unique
过滤器。为此,你需要为angularui添加dependecy,
然后你可以简单地做
ng-repeat="item in items | unique:'item' "
答案 3 :(得分:1)
此外,您可以在underscore.js中使用_.reject或_.filter函数来防止基于条件的重复值