有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

js数组求和函数(递归函数式编程)实现的2种方式

javascript 炮渣日记 3周前 (11-07) 21次浏览 已收录 0个评论 扫描二维码

有下面一组数据

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两个字段进行调用公共方法实现多个列求和。

如果求和之后数据需要保留小数点后两位或三位有效数字,可以根据具体情况进行相应封装,我们这里就不做一一分享了。

喜欢 (0)
炮渣日记
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址