1
我有一个前端有一个订单表。每个订单可以交付,不交付或部分交付。我需要根据选择哪个选项来计算总计(因此总计也被过滤),并且我确实找到了一个解决方案,但我知道我过于复杂,我并不是一个真正的AngularJS开发人员。AngularJS计算几个相同对象的合计
function calculateTotals(){
vm.sales.total_amount = {'_': 0, '_not': 0, '_part': 0, '_done': 0, 'n-p': 0};
vm.sales.total_price = {'_': 0, '_not': 0, '_part': 0, '_done': 0, 'n-p': 0};
vm.sales.order_total_price = {'_': 0, '_not': 0, '_part': 0, '_done': 0, 'n-p': 0};
vm.sales.order_total_amount = {'_': 0, '_not': 0, '_part': 0, '_done': 0, 'n-p': 0};
angular.forEach(vm.sales, function (sale) {
angular.forEach(vm.sales.total_amount, function(value, key){
vm.sales.total_amount[key] += (sale.status == key) ? sale.total_amount * 1 : 0;
vm.sales.total_price[key] += (sale.status == key) ? sale.total_price * 1 : 0;
vm.sales.order_total_amount[key] += (sale.status == key) ? sale.order_total_amount * 1 : 0;
vm.sales.order_total_price[key] += (sale.status == key) ? sale.order_total_price * 1 : 0;
});
vm.sales.total_amount['_'] += sale.total_amount * 1;
vm.sales.total_price['_'] += sale.total_price * 1;
vm.sales.order_total_amount['_'] += sale.order_total_amount * 1;
vm.sales.order_total_price['_'] += sale.order_total_price * 1;
});
vm.sales.total_amount['_'] = vm.sales.total_amount['_'] - vm.sales.total_amount['n-p'];
vm.sales.total_price['_'] = vm.sales.total_price['_'] - vm.sales.total_price['n-p'];
vm.sales.order_total_amount['_'] = vm.sales.order_total_amount['_'] - vm.sales.order_total_amount['n-p'];
vm.sales.order_total_price['_'] = vm.sales.order_total_price['_'] - vm.sales.order_total_price['n-p'];
}
有4个变量我需要在前面,总量和总价格(许多交付的总和,从Laravel后端未来总结),订单总价格和订单总量(从Laravel后端取)。
我该如何简化?
编辑感谢stej4n我已经走到这...虽然我仍然觉得它可以去简单
function calculateTotals() {
var properties = ['total_amount', 'total_price', 'order_total_amount', 'order_total_price'];
var keys = ['_', '_not', '_part', '_done', 'n-p'];
angular.forEach(properties, function (prop) {
vm.sales[prop] = {'_': 0, '_not': 0, '_part': 0, '_done': 0, 'n-p': 0};
});
angular.forEach(vm.sales, function (sale) {
angular.forEach(properties, function (prop) {
vm.sales[prop]['_'] += sale[prop] * 1;
angular.forEach(keys, function (key) {
vm.sales[prop][key] += (sale.status == key) ? sale[prop] * 1 : 0;
});
});
});
angular.forEach(properties, function (prop) {
vm.sales[prop]['_'] -= vm.sales[prop]['n-p'];
});
}
vm.sales是从后端获取的集合。每个销售有一个状态 – Norgul
我认为你可以安全地删除每个'* 1' –