JavaScript数组reduce求和

数组reduce方法:

JS中数组提供了reduce的API来解决累加的问题,先看运行效果图
在这里插入图片描述

介绍

arr.reduce(callback,[initialValue])

callback:回调函数,执行数组中每个值 (如果没有提供 initialValue 则第一个值除外)的函数,包含四个参数:

accumulator:累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue。
currentValue:数组中正在处理的元素。
index(可选):数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则从索引1起始。
array(可选):调用 reduce() 的数组

举例

[ 1,2,3,4,5 ].reduce(  (  )=>{  }, 10  )    

第一个参数是个回调,第二个参数是要累加的初始值,这里从10开始累加
回调中至少写两个参数,第一个代表初始值,第二个是当前元素,
第三个是索引,第四个是当前数组对象(第3、4个参数是可选的)

const result = [ 1,2,3,4,5 ].reduce( ( total, item,index,obj )=>{ return total + item }, 10  )    

运行结果是 25


完整的代码实现:

  const  arr = [	 
        {a: 5, b: 10, c: 20, msg: 'success'},
        {a: 5, b: 10, c: 20, msg: 'warn'},
        {a: 100, b: 100, c: 100, msg: 'error'}
    ];
    console.log('数组:',arr);
    let sum = {a:0, b:0, c:0, msg:0}
    console.log('before:',sum);
    for (let pos in sum) {
        let total = arr.reduce((total, row) => { // 参数:累加初始值,当前对象
            return total + parseInt(row[pos])   //  将每一行相同属性名累加起来
        }, 0)
        sum[pos] = !isNaN(total) ? total : '-' 	  // 	处理非数字(很重要)
    }
    console.log('after:',sum)  

扩展:

这里和reduce没什么关系,记录一下方便以后用到

获取数组元素所有属性
let sum = {} 
Object.keys(arr[0]).forEach((item) => {
        Object.defineProperty(sum, item, {
            value: 0,
            writable: true,
            enumerable: true,
            configurable: true
        })
    })

这样可以拿到所有的属性名:a,b,c,msg

在这里插入图片描述

提取部分属性,使用JSON.stringify()
   const arr2 = JSON.parse(JSON.stringify(arr, ['b', 'c']))

这样就提取到了属性值只有b和c的数据
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值