javascript
有下面一组数据
const data = [
{ name:'小明', score:'90',age:10 },
{ name:'小王', score:'100',age:9 },
{ name:'小赵', score:'80',age:9 },
{ name:'小强', score:'97',age:8 }
]
我们现在的需求是对score和age两列进行求和计算。下面我们先对求和方法进行封装,这里我分享两种常用的方法。
方法一:采用递归的方式
export const getTotal = (data,key) => {
var len = data.length;
if(len == 0){
return 0;
} else if (len == 1){
// 特殊情况;当其中某个值为空时默认为数字0
return Number(data[0][key]?data[0][key]:0);
} else {
// 特殊情况;当其中某个值为空时默认为数字0
// 递归的方式调用getTotal方法
return Number(data[0][key]?data[0][key]:0) getTotal(data.slice(1),key);
}
}
// 调用 getTotal(data,'score')或 getTotal(data,'age')
方法二:函数式编程reduce
export const getTotal = (data,key) => {
// 一维数组求和方法reduce
return data.reduce(function(prev, curr, idx, arr){
if(typeof prev=='object') {
return Number(prev[key]) Number(curr[key]);
}else{
return prev Number(curr[key]);
}
});
}
// 调用 getTotal(data,'score')或 getTotal(data,'age')
然后我们如果要在项目中使用可以遍历age和score两个字段进行调用公共方法实现多个列求和。
如果求和之后数据需要保留小数点后两位或三位有效数字,可以根据具体情况进行相应封装,我们这里就不做一一分享了。
,