从此数组中获取元素$ scope.pricingList = [[Object {amount =" 1",type =" HOURLY"}],[Object {amount =" 1&#34 ;,键入=" HOURLY"}]]

时间:2016-09-28 07:38:34

标签: javascript jquery angularjs

到目前为止,我已经尝试过这个:

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

我的目标是防止用户两次提供相同的类型。这里输入的是每小时,每月,每周。

他只能设置一次值。告诉我解决方案或我能做到的任何其他方式吗?

3 个答案:

答案 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)

Below code may be helpful

为什么需要将“$ scope.P”推入partialPricing。你处理这一行的任何相关逻辑都是什么?

$ scope.partialPricing.push([$ scope.p]);