javascript - AngularJS 计算总订单金额

标签 javascript angularjs

我需要创建一个函数来计算所有对象的价格和数量并返回摘要。我的代码:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.menu = {
        burgers: [
            {name: "Classic", price: 10, qty: 1},
            {name: "Mexican", price: 12, qty: 1}
        ],
        drinks: [
            {name: "Water", price: 5, qty: 1},
            {name: "Beer", price: 5, qty: 2}
        ]
    }
    $scope.calcTotal = function() {
        var total = 0;
        // return price*qty of all objects in both arrays 
        // inside menu object and sum them together
        return total;
    }
}

在模板中,我想做这样的事情:

<div>{{ calcTotal() }}</div>

我应该如何编写这个 calcTotal() 函数来实现这一点?
在这种情况下,它应该返回 37。
提前致谢!
还有一个 fiddle .

最佳答案

为什么不利用 reduce() 函数?

只要 $scope.menu 只包含数组,这段代码就会无误地执行

$scope.calcTotal = function() {
    var sum  = 0;
    for (var array in $scope.menu) {
        sum += $scope.menu[array].reduce(function(acc, el) { 
                   return acc + el.price * el.qty 
               }, 0);
    }
    return sum;
}

JavaScript 中的每个数组都实现了 map()reduce() 原语,这些允许您将一些代码应用于数组中的每个元素(在map) 或对每个元素应用相同的代码并将其传递给下一个元素,这样您就可以求和或累加值。 (reduce 中名为 acc 的参数)

我建议阅读这些(非常有用的)函数,它们是函数式编程语言的基础,对于 JS reduce,您可以查看 MDN doc page

最后一点,JavaScript 的 for-in 迭代 $scope.menu 中包含的每个属性 name,所以 array 在这种情况下将是对象中的名称,例如 'burgers''drinks'

关于javascript - AngularJS 计算总订单金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515930/

相关文章:

javascript - 即使设置了宽度,TouchableOpacity 也会占用所有可用空间

javascript - 从 $http 调用解析 AngularJS 中的 JSon 数据

javascript - 在 ng-disabled 中使用 item 的 data-key

angularjs - 如何使用 AngularJS 过滤数组并使用过滤对象的属性作为 ng-model 属性?

javascript - 使用 overflow-y 强制 div 始终显示最新的(div 的底部)

JavaScript 多级继承和 isPrototypeOf

javascript - 嵌入了动态驱动器选项卡的谷歌地图(不是 jquery-ui 选项卡)

javascript - Bootstrap 图像滑动时更改 div 背景颜色

angularjs - Angular ui-router 的生命周期是什么? (用于调试无声错误)

javascript - Angular 教程 - 我在哪里迷路了?