gpt4 book ai didi

javascript - AngularJS 计算多个相同对象的总数

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:28 25 4
gpt4 key购买 nike

我有一个带有订单表的前端。每个订单可能已交付、未交付或部分交付。我需要根据选择的选项来计算总计(因此总计也会被过滤),并且我确实找到了解决方案,但我知道我让事情变得过于复杂,我并不是真正的 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'];
});
}

最佳答案

最后 4 行已经可以这样简化:

angular.forEach(['total_amount', 'total_price', 'order_total_amount'], function(prop) {
vm.sales[prop] -= vm.sales[prop]['n-p'];
});

(sale.status == key) 来自哪里? vm.sales 的任何对象中都不存在 status 属性?

额外优化:删除每个* 1,它不应该改变任何东西^^

关于javascript - AngularJS 计算多个相同对象的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com