在AngularJS中对数组集合使用ng repeat

Using ng-repeat with a collection of arrays in AngularJS

本文关键字:ng repeat 集合 数组 AngularJS      更新时间:2023-09-26

我有一个看起来像这样的对象:

Object {391:Array[1], 396: Array[2]}
   391: 
      Array[1]
        0: 
         arrival: "17.43.49"
         car: "391"
         date: "11/11/2014"
         duration: "00:00:06"
         time: "17.43.43"
    396: 
      Array[2]
        0: 
         arrival: "17.20.48"
         car: "396"
         date: "11/11/2014"
         duration: "00:00:11"
         time: "17.20.37"
        1:
         arrival: "17.21.27"
         car: "396"
         date: "11/11/2014"
         duration: "00:00:17"
         time: "17.21.10"

它由以下功能构成:

var carsDict = {};
angular.forEach($scope.recordlist, function(record) {
  carsDict[record.car] = carsDict[record.car] || [];
  carsDict[record.car].push(record);
});
$scope.carstats = carsDict;

使用AngularJS有没有任何方法可以添加数组中每个对象的子字符串属性?

例如,在上面的例子中,每个物体都是来自特定汽车的一次旅行(391有一次旅行,396有两次旅行)。现在,我使用如下的ng重复列出汽车代码行程次数

<div class="row" ng-repeat="carcode in carstats">          
   <div class="col-md-4">{{carcode[0].car}}</div>
   <div class="col-md-4">{{carcode.length}}</div>
</div>

我想做的是计算出每辆车的总持续时间,所以我需要能够将每个数组中每个对象的所有持续时间属性相加。

在上面的例子中,每个数组最终都必须具有属性totalduration,该属性是数组的所有对象中所有持续时间属性的总和。例如,第二个数组应具有396.totalduration=(duration:"00:00:11")+(duration:"00:00:17")

有什么建议吗?

我建议在控制器中进行总和计算:

var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
var carsDict = { 
    391: [
        {
         arrival: "17.43.49",
         car: "391",
         date: "11/11/2014",
         duration: "00:00:06",
         time: "17.43.43"
        }
    ],
    396: {
        0: {
         arrival: "17.20.48",
         car: "396",
         date: "11/11/2014",
         duration: "00:00:11",
         time: "17.20.37",
        },        
        1: {
         arrival: "17.21.27",
         car: "396",
         date: "11/11/2014",
         duration: "00:00:17",
         time: "17.21.10"
        }
    }
};
for (record in carsDict) {     
    var totalduration = '';
    for (item in carsDict[record]) {
        // get totalduration figured out..
        totalduration += carsDict[record][item].duration; // need to account for sum using time format here
    }
    for (item in carsDict[record]) {
        // now add totalduration to each record        
        carsDict[record][item]['totalduration'] = totalduration; 
        // to add a new value to the individual item        
        carsDict[record][item]['newvalue'] = 'anything you want';
        // to remove a value (I prefer changing to undefined)
        carsDict[record][item].arrival = undefined;
    }
};
    $scope.test = carsDict;
}