繁体   English   中英

使用javascript对数组内的值求和

[英]Sum values inside of array with javascript

我从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]

使用纯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); 

你应该试试这个:

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

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

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


只是使用

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

我会这样写:

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

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

您可以使用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> 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM