使用javascript对数组内的值求和

时间:2018-01-10 15:58:07

标签: javascript angularjs

我从api获取信息,我想要做的是将其中的值相加。让我们说下一个代码:

function totalPesos(){
    $http.get('/api/valueForTest')
    .then(function(data){
        $scope.resumePesos = data.data.Response;
        //console.log($scope.resumePesos);
}

得到下一个答案:

[{Id: 60, Name: Chuck, Quantity: 300},
{Id: 61, Name: Arthur, Quantity: 199},
{Id: 62, Name: John, Quantity: 450}]

我想要做的是总结Quantity。我怎样才能做到这一点?我试过了:

$scope.resumePesos.reduce(function(a,b){return a + b; });

但答案是[object Object]

7 个答案:

答案 0 :(得分:2)

使用纯JS尝试以下内容:

var data = [{Id: 60, Name: 'Chuck', Quantity: 300},
{Id: 61, Name: 'Arthur', Quantity: 199},
{Id: 62, Name: 'John', Quantity: 450}]
var sum = data.reduce(function(a, b){
  a += b['Quantity'];
  return a;
},0)
console.log(sum);

答案 1 :(得分:1)

你应该试试这个:

$scope.resumePesos.reduce((a,b) => {return a + b.Quantity}, 0); // Note: 0 at the end

答案 2 :(得分:1)

你做错了两件事 - 你还没有为reduce函数设置一个初始值,你正在求和对象而不是它的数值属性(.Quantity)。

 var sum = $scope.resumePesos.reduce(function(acummulated, rp) {
  return accumulated + rp.Quantity; 
 }, 0);

答案 3 :(得分:1)


  只需使用

$scope.sum = $scope.resumePesos.reduce(function(a,b){return a + b.Quantity; }, 0);

答案 4 :(得分:1)

我会这样写:

$scope.resumePesos.reduce((acc, x) => acc + x.Quantity, 0);

请记住,传递给reduce的函数的第一个参数是累加器,第二个是迭代的每个值,在这种情况下是每个对象。因此,您需要访问每个对象的Quantity属性。然后,您需要将累加器的初始值作为第二个参数传递以减少自身。在这种情况下,这将是0,因为我们只需要一个数字作为结果

答案 5 :(得分:1)

您可以使用lodash,如果您想在lodash上使用其他一些功能,这将非常有用。

你可以做到

_。sumBy($ scope.resumePesos,'Quantity');

var data = [
  {Id: 60, Name: 'Chuck', Quantity: 300},
  {Id: 61, Name: 'Arthur', Quantity: 199},
  {Id: 62, Name: 'John', Quantity: 450}
]
  
console.log(_.sumBy(data, 'Quantity'));
  
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

答案 6 :(得分:0)

对所有人来说,我已经尝试了所有的评论,并且工作得很好!