请问在数组中求和属性值的更好方法

在数组中求和属性值的更好方法

我有这样的事情:

$scope.traveler = [
            {  description: 'Senior', Amount: 50},
            {  description: 'Senior', Amount: 50},
            {  description: 'Adult', Amount: 75},
            {  description: 'Child', Amount: 35},
            {  description: 'Infant', Amount: 25 },];

现在,为了获得这个数组的总数,我执行如下操作:

$scope.totalAmount = function(){
       var total = 0;
       for (var i = 0; i < $scope.traveler.length; i++) {
              total = total + $scope.traveler[i].Amount;
            }
       return total;}

当只是一个数组时很容易,但是我有其他的数组,它们具有不同的属性名,我想要与它们相加。

如果我能做这样的事,我会更高兴的:

$scope.traveler.Sum({ Amount });

但我不知道如何通过这样一种方式来重复使用它:

$scope.someArray.Sum({ someProperty });

回答

我决定用@grff-兔子的建议,所以我避免原型本机对象(阵列)

我刚刚对他的答案做了一些修改,验证了数组,和的值不为空,这是我的最后实现:

$scope.sum = function (items, prop) {
    if (items == null) {
        return 0;
    }
    return items.reduce(function (a, b) {
        return b[prop] == null ? a : a + b[prop];
    }, 0);};


湖上湖
浏览 375回答 3
3回答

至尊宝的传说

我知道这个问题有一个被接受的答案,但我想我应该加入一个替代方案减少,看到对数组进行求和是减少的典型示例:$scope.sum&nbsp;=&nbsp;function(items,&nbsp;prop){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;items.reduce(&nbsp;function(a,&nbsp;b){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;+&nbsp;b[prop]; &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;0);};$scope.travelerTotal&nbsp;=&nbsp;$scope.sum($scope.traveler,&nbsp;'Amount');小提琴

宝慕林4294392

再来一次,这就是nativeJavaScript函数Map和Reduce是为(Map和Remote是多种语言的引擎)而构建的。var&nbsp;traveler&nbsp;=&nbsp;[{description:&nbsp;'Senior',&nbsp;Amount:&nbsp;50}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Senior',&nbsp;Amount:&nbsp;50}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Adult',&nbsp;Amount:&nbsp;75}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Child',&nbsp;Amount:&nbsp;35}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Infant',&nbsp;Amount:&nbsp;25}];function&nbsp;amount(item){ &nbsp;&nbsp;return&nbsp;item.Amount;}function&nbsp;sum(prev,&nbsp;next){ &nbsp;&nbsp;return&nbsp;prev&nbsp;+&nbsp;next;}traveler.map(amount).reduce(sum);//&nbsp;=>&nbsp;235; &nbsp;&nbsp;//&nbsp;or&nbsp;use&nbsp;arrow&nbsp;functionstraveler.map(item&nbsp;=>&nbsp;item.Amount).reduce((prev,&nbsp;next)&nbsp;=>&nbsp;prev&nbsp;+&nbsp;next);注通过单独设置更小的函数,我们可以再次使用它们。//&nbsp;Example&nbsp;of&nbsp;reuse.//&nbsp;Get&nbsp;only&nbsp;Amounts&nbsp;greater&nbsp;than&nbsp;0;//&nbsp;Also,&nbsp;while&nbsp;using&nbsp;Javascript,&nbsp;stick&nbsp;with&nbsp;camelCase. //&nbsp;If&nbsp;you&nbsp;do&nbsp;decide&nbsp;to&nbsp;go&nbsp;against&nbsp;the&nbsp;standards,&nbsp;//&nbsp;then&nbsp;maintain&nbsp;your&nbsp;decision&nbsp;with&nbsp;all&nbsp;keys&nbsp;as&nbsp;in... //&nbsp;{&nbsp;description:&nbsp;'Senior',&nbsp;Amount:&nbsp;50&nbsp;}//&nbsp;would&nbsp;be//&nbsp;{&nbsp;Description:&nbsp;'Senior',&nbsp;Amount:&nbsp;50&nbsp;};var&nbsp;travelers&nbsp;=&nbsp;[{description:&nbsp;'Senior',&nbsp;amount:&nbsp;50}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Senior',&nbsp;amount:&nbsp;50}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Adult',&nbsp;amount:&nbsp;75}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Child',&nbsp;amount:&nbsp;35}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Infant',&nbsp;amount:&nbsp;0&nbsp;}]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Directly&nbsp;above&nbsp;Travelers&nbsp;array&nbsp;I&nbsp;changed&nbsp;"Amount"&nbsp;to&nbsp;"amount"&nbsp;to&nbsp;match&nbsp;standards.function&nbsp;amount(item){ &nbsp;&nbsp;return&nbsp;item.amount;}travelers.filter(amount);//&nbsp;=>&nbsp;[{description:&nbsp;'Senior',&nbsp;amount:&nbsp;50}, &nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Senior',&nbsp;amount:&nbsp;50},//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Adult',&nbsp;amount:&nbsp;75}, &nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{description:&nbsp;'Child',&nbsp;amount:&nbsp;35}];//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Does&nbsp;not&nbsp;include&nbsp;"Infant"&nbsp;as&nbsp;0&nbsp;is&nbsp;falsey.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript