如果它们在角度中具有相同的类别,如何添加金额并删除重复的条目。
例如:
self.lineDetails = [{id:'0',category:'AAA',amount:'500'},
{id:'1',category:'BBB',amount:'200'},
{id:'2',category:'AAA',amount:'300'}]
期望输出:
self.newLineDetails = [{id:'0',category:'AAA',amount:'800'},
{id:'1',category:'BBB',amount:'200'}]
您可以使用 angularjs filter groupBy
演示
var myApp = angular.module('myApp', ['angular.filter']);
myApp.controller('MyController', function($scope) {
$scope.data = [{id:'0',category:'AAA',amount:'500'},
{id:'1',category:'BBB',amount:'200'},
{id:'2',category:'AAA',amount:'300'}];
$scope.getAmountSum = function(items) {
return items
.map(function(x) { return x.amount; })
.reduce(function(a, b) { return parseInt(a) + parseInt(b); });
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.8/angular-filter.js"></script>
<div ng-app="myApp" ng-controller="MyController">
<ul>
<li ng-repeat="(key, items) in data | groupBy: 'category'">
category: {{items[0].category}}, amount: {{getAmountSum(items)}}
</li>
</ul>
</div>
您可以尝试在angular js中创建映射类型的json,如下所示:
self.lineDetails = [{id:'0',category:'AAA',amount:'500'},
{id:'1',category:'BBB',amount:'200'},
{id:'2',category:'AAA',amount:'300'}];
self.lineDetailsMap = {};
angular.forEach(self.lineDetails, function(lineDetail) {
if(self.lineDetailsMap[lineDetail.category] !== undefined) {
var lineDetailOld = self.lineDetailsMap[lineDetail.category] ;
lineDetail.amount = parseInt(lineDetailOld.amount) + parseInt(lineDetail.amount);
}
self.lineDetailsMap[lineDetail.category] = lineDetail;
});
现在,您可以迭代此映射以获取新列表:
self.newLineDetails = [];
angular.forEach(self.lineDetailsMap,function(value,key) {
self.newLineDetails.push(value);
});
如果您有任何问题,请告诉我