Javascript 基于其他数组键值获取数组值和

Javascript 基于其他数组键值获取数组值和,javascript,arrays,Javascript,Arrays,我有一个类似的数组: var programs_array = [ {"id":3543,"category":"1","target_revenue":1845608}, {"id":2823,"category":"1","target_revenue":1627994}, {"id":1611,"category":"1","target_revenue":1450852}, {"id":1624,"category":"1","target_revenue":25473}, {"id":

我有一个类似的数组:

var programs_array = [
{"id":3543,"category":"1","target_revenue":1845608},
{"id":2823,"category":"1","target_revenue":1627994},
{"id":1611,"category":"1","target_revenue":1450852},
{"id":1624,"category":"1","target_revenue":25473},
{"id":4626,"category":"2","target_revenue":253048},
{"id":5792,"category":"2","target_revenue":298468},
{"id":5799,"category":"2","target_revenue":256815},
{"id":5171,"category":"2","target_revenue":239090},
{"id":4064,"category":"3","target_revenue":119048},
{"id":2322,"category":"3","target_revenue":59146},
{"id":3466,"category":"3","target_revenue":29362},
{"id":3442,"category":"3","target_revenue":149860},
{"id":1254,"category":"3","target_revenue":15600},
{"id":1685,"category":"3","target_revenue":45463}
];
如果“类别”等于2,我想要所有“目标收入”值的总和。目前,我正在这样做,但我想确保我这样做是最有效的方式

Array.prototype.sum_cat = function (prop, cat, val) {
    var total = 0
    for ( var i = 0, _len = this.length; i < _len; i++ ) {
        if(this[i][cat]==val){total += this[i][prop]}
    }
    return total
} 

console.log('total 2: '+programs_array.sum_cat('target_revenue','category',2));
Array.prototype.sum_cat=函数(prop、cat、val){
var总计=0
对于(变量i=0,_len=this.length;i<_len;i++){
如果(this[i][cat]==val){total+=this[i][prop]}
}
返回总数
} 
log('total 2:'+programs\u array.sum\u cat('target\u revenue','category',2));

这里有一把小提琴:

我会使用
reduce
,如果
类别
为2:

const programs_array=[{“id”:3543,“category”:“1”,“target_-revenue”:1845608},{“id”:2823,“category”:“1”,“target_-revenue”:1621,“category”:“1”,“target_-revenue”:1450852},{“id”:1624,“categegory”:“1”,“target_-revenue”:25473},{“id”:4626,“categegory”:“2”,“target_-revenue”:253048},{“id”:5792,“category”:“2”,“target u-revenue”:298468,{,“类别”:“2”,“目标收入”:256815},{“id”:5171,“类别”:“2”,“目标收入”:239090},{“id”:4064,“类别”:“3”,“目标收入”:119048},{“id”:2322,“类别”:“3”,“目标收入”:59146},{“id”:3466,“类别”:“3”,“目标收入”:29362},{“id”:3442,“类别”:“3”,“目标收入”:149860,{“id”:1254,“类别”:“3”,“目标收入”:15600}“:1685,“类别”:“3”,“目标收入:45463}]
const getSum=(findCat)=>programs\u array.reduce((a,{category,target\u revenue})=>(
类别===findCat
?a+目标收入
:a
), 0);

控制台日志(getSum(“2”))
如果
类别
为2,我将使用
减少
,添加到累加器中:

const programs_array=[{“id”:3543,“category”:“1”,“target_-revenue”:1845608},{“id”:2823,“category”:“1”,“target_-revenue”:1621,“category”:“1”,“target_-revenue”:1450852},{“id”:1624,“categegory”:“1”,“target_-revenue”:25473},{“id”:4626,“categegory”:“2”,“target_-revenue”:253048},{“id”:5792,“category”:“2”,“target u-revenue”:298468,{,“类别”:“2”,“目标收入”:256815},{“id”:5171,“类别”:“2”,“目标收入”:239090},{“id”:4064,“类别”:“3”,“目标收入”:119048},{“id”:2322,“类别”:“3”,“目标收入”:59146},{“id”:3466,“类别”:“3”,“目标收入”:29362},{“id”:3442,“类别”:“3”,“目标收入”:149860,{“id”:1254,“类别”:“3”,“目标收入”:15600}“:1685,“类别”:“3”,“目标收入:45463}]
const getSum=(findCat)=>programs\u array.reduce((a,{category,target\u revenue})=>(
类别===findCat
?a+目标收入
:a
), 0);

控制台日志(getSum(“2”))您可以使用reduce链接过滤器,以轻松简洁地完成此操作

const sum = programs_array.filter(e => e.category === '2').reduce((acc, element) => acc + element.target_revenue);
或者,如果您想要一种稍微更高效但不那么简洁的方式,您可以执行以下操作。但这种大小的数组之间的差异可能可以忽略不计


您可以使用reduce链接过滤器,以轻松简洁地完成此操作

const sum = programs_array.filter(e => e.category === '2').reduce((acc, element) => acc + element.target_revenue);
或者,如果您想要一种稍微更高效但不那么简洁的方式,您可以执行以下操作。但这种大小的数组之间的差异可能可以忽略不计


您可以使用
array.reduce()

让arr=[{“id”:3543,“类别”:“1”,“目标收入”:1845608},{“id”:2823,“类别”:“1”,“目标收入”:1627994},{“id”:1611,“类别”:“1”,“目标收入”:1450852},{“id”:1624,“类别”:“1”,“目标收入”:25473},{“id”:4626,“类别”:“2”,“目标收入”:253048},{“id”:5792,“类别”:“2”,“目标收入”:298468},{“id”:5799,{,“类别”:“2”,“目标收入”:256815},{“id”:5171,“类别”:“2”,“目标收入”:239090},{“id”:4064,“类别”:“3”,“目标收入”:119048},{“id”:2322,“类别”:“3”,“目标收入”:59146},{“id”:3466,“类别”:“3”,“目标收入”:29362},{“id”:3442,“类别”:“3”,“目标收入”:149860,{“id”:1254,“类别”:“3”,“目标收入”:15600},{“id”:1685,“类别”:“3”,“目标收入:45463}];
函数getSum(prop,val){
返回arr.reduce((a,curr)=>curr.category==val?a+curr[prop]:a,0);
}

log(getSum(“target_revenue”,“2”));
您只需使用
array.reduce()

let arr=[{“id”:3543,“类别”:“1”,“目标收入”:1845608},{“id”:2823,“类别”:“1”,“目标收入”:1627994},{“id”:1611,“类别”:“1”,“目标收入”:1450852},{“id”:1624,“类别”:“1”,“目标收入”:25473},{“id”:4626,“类别”:“2”,“目标收入”:253048},{“id”:5792,“类别”:“2”,“目标收入”:298468},{“id”:5799,”类别“:”2“,”目标收入“:256815},{”id“:5171,“类别“:”2“,”目标收入“:239090},{”id“:4064,“类别“,”3“,”目标收入“:119048},{”id“:2322,“类别“,”3“,”目标收入“:59146},{”id“:3466,“类别“,”3“,”目标收入“:29362},{”id“:3442,“类别“,”3“,”目标收入“,”149860 1254,“类别“,”3”,“目标收入“,”15600},{“id”:1685,“类别”:“3”,“目标收入”:45463}];
函数getSum(prop,val){
返回arr.reduce((a,curr)=>curr.category==val?a+curr[prop]:a,0);
}

log(getSum(“target_revenue”,“2”));
一般来说,for
循环将是最有效的解决方案

见:

我将使用您的代码,只需稍作修改,如下所示:

Array.prototype.sum_cat=函数(prop、cat、val){
让total=0,
_len=这个长度;
for(设i=0;i<\u len;i++){
如果(this[i][cat]==val){total+=this[i][prop];}
}
返回总数;
} 

console.log('total 2:'+programs\u array.sum\u cat('target\u revenue','category',2));
一般来说,对于循环的
将是最有效的解决方案

见:

我将使用您的代码,只需稍作修改,如下所示:

Array.prototype.sum_cat=函数(prop、cat、val){
让total=0,
_len=这个长度;
for(设i=0;i<\u len;i++){
如果(this[i][cat]==val){total+=this[i][prop];}
}
返回总数;
} 
控制台