到目前为止,我已经尝试过这个:
if ($scope.flag) {
$scope.partialPricing.push([$scope.p]);
$scope.flag = false;
} else {
for (var i = 0; i < $scope.partialPricing.length; i++) {
console.log("finding object = " + $scope.partialPricing);
if ($scope.partialPricing[i].type != $scope.p.type) {
$scope.partialPricing.push([$scope.p]);
break;
} else {
console.log("Already Given . Please Clear .");
}
}
}
问题是当它进入其他条件时,它会得到
$scope.partialPricing = [Object Object]
以及$scope.partialPricing[i].type = undefined
。
我的目标是防止用户两次提供相同的类型。这里输入的是每小时,每月,每周。
他只能设置一次值。告诉我解决方案或我能做到的任何其他方式吗?
答案 0 :(得分:0)
循环中的if条件将无法正常工作:如果元素的类型与列表的第一个元素不同,它将把元素添加到列表中,与列表的其余部分无关。
最简单的方法是按如下方式进行查找功能:
function lookupByType(type) {
for (var i = 0; i < $scope.partialPricing.length; i++) {
if ($scope.partialPricing[i].type == type) {
return true;
}
}
return false;
}
然后按如下方式使用它(这里没有循环):
if (lookupByType($scope.p.type)) {
console.log("Already Given . Please Clear .");
} else {
$scope.partialPricing.push($scope.p);
}
关于$scope.flag
,我假设你知道你用它来绕过验证,你可能有充分的理由这样做。但是,如果目标只是插入第一个元素,则不需要它:如果到目前为止列表为空,查找函数将始终返回false
。
编辑:您还遇到了类型问题:您的定价列表是一组对象数组,您将其用作对象数组。您可能希望使用后者,因此您需要push($scope.p)
而不是push([$scope.p])
。
答案 1 :(得分:0)
您可以稍微切换一下其他部分并检查是否相等,因为这是退出循环所需的内容。然后打破并根据支票进行下一步操作。
if ($scope.flag) {
$scope.partialPricing.push([$scope.p]);
$scope.flag = false;
} else {
var found = false;
for (var i = 0; i < $scope.partialPricing.length; i++) {
console.log("finding object = " + $scope.partialPricing);
if ($scope.partialPricing[i].type === $scope.p.type) {
console.log("Already Given . Please Clear .");
found = true;
break;
}
}
if (!found) {
$scope.partialPricing.push([$scope.p]);
}
}
否则,您可以使用Array#some
并执行检查
if ($scope.flag) {
$scope.partialPricing.push([$scope.p]);
$scope.flag = false;
} else {
var found = false;
if ($scope.partialPricing.some(function (price) { return price.type === $scope.p.type; })) {
console.log("Already Given . Please Clear .");
} else {
$scope.partialPricing.push([$scope.p]);
}
}
答案 2 :(得分:0)