繁体   English   中英

如何在AngularJS ng-repeat中求和Json数组值

[英]How to Sum a Json Array value in AngularJS ng-repeat

我想总结使用JSON数组动态添加的产品数量。

               <tr ng-repeat="(key,val) in form.products">
                    <td>{{ProductName(key)}}</td>
                    <td >
                        <input type="text" name="products" ng-model="form.products[key]" class="form-control">
                    </td>
                </tr>

在上面的示例中,如何获得乘积之和?

使用lodash

假设您要求和的值位于名为“ price”的属性中:

{{_(form.products).mapValues('price').sum()}}

您可能需要先将lodash纳入您的范围。 在控制器中,如下所示:

scope._ = _;

这种方法

您使用的是“ 带有属性 的对象 ”,而不是“ 对象 数组 ”,这就是为什么您不能使用上面的示例$ scope.products.length; ...的原因

您的产品对象及其属性

$scope.products ={
"1":"20",//property 1 with value 20
"2":"35",//property 2 with value 35
"3":"150"//property 3 with value 150
}

数据对象(具有属性的对象)

 $scope.myData = {"1":120,"2":250,"3":500};

迭代到对象属性并求和的函数

//read object properties and sum price
    $scope.calculateSum = function(data){
    var sum=0;  
    var counter=0;
     for (var property in data) {
       if (data.hasOwnProperty(property)) {
          sum += data[property];
          counter++;
       }
     }
     return sum;
    };

迭代到对象属性并计算乘积的函数

//read object properties and count the products
   $scope.countProducts = function(data){
    var counter=0;
     for (var property in data) {
       if (data.hasOwnProperty(property)) {
          counter++;
       }
     }
     return counter;
    };

进入您的HTML模板:

  <table>
  <tr ng-repeat="(key,value) in myData track by $index">
   <td>
        <input type="text" name="id" ng-model="key" class="form-control">
  </td>
   <td>      
      <input type="text" name="price" ng-model="value" class="form-control">            
   </td>
  </tr>
  <tr>
    <td>Products: {{countProducts(myData)}}</td>
    <td>Sum: {{calculateSum(myData)}}</td>
  </tr>
  </table>

我已经完成了一个实时示例,该示例对产品进行计数并对产品价格进行求和: http : //plnkr.co/edit/FmJhvV?p=preview

希望有帮助,祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM