Reduce函数

Reduce函数1 Reduce 函数 1 1 概述 reduce 方法接收一个函数作为累加器 数组中的每个值 从左到右 开始缩减 最终计算为一个值 let 结果 数组 reduct 累加器 初始化值 累加器 累加结果 当前值 当前索引 gt return 处理结果

大家好,我是讯享网,很高兴认识大家。

1.Reduce函数

1.1 概述

​ reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。


讯享网

let 结果 = 数组.reduct(累加器, 初始化值) //累加器 (累加结果, 当前值, 当前索引)=>{ return 处理结果 } 

讯享网

1.2 累加和

讯享网// reduce 案例1:累加和 let arr = [1,2,3,4,5] let s = arr.reduce( (sum,current,index)=>{ 
    return sum + current } , 0) console.info(s) 

1.3 对象数组的累加和

//案例2:对象数组的累加和 let arr = [ { 
    name: 'jack', count: 10 }, { 
    name: 'rose', count: 20 } ] let s = arr.reduce((sum,current,index)=>{ 
    return sum + current.count },0); console.info(s) 

1.3 对象数组分组求和

讯享网//案例3: let arr = [ { 
   name: 'jack',course:'语文',count: 100}, { 
   name: 'jack',course:'英语',count: 100}, { 
   name: 'jack',course:'数学',count: 100}, { 
   name: 'rose',course:'语文',count: 50}, { 
   name: 'rose',course:'英语',count: 50}, { 
   name: 'rose',course:'数学',count: 50} ] //reduce let s2 = arr.reduce((obj,current,index)=>{ 
    let name = current.name let count = current.count // 获得obj对应名称值 {'jack':100} --》 100 let oldCount = obj[name] // oldCount 如果是 undefined,表示此名称第一次出现 if(oldCount){ 
    obj[name] = oldCount + count } else { 
    //第一次赋值 obj[name] = count } console.info(`之前累加值:${ 
     oldCount},当前值:${ 
     count},最终结果:${ 
     JSON.stringify(obj)}`) return obj } , { 
   }) //结果:{'jack': 300, 'rose': 150} /*没有数据:{} {'jack': 100} {'jack': 200} {'jack': 300} {'jack': 300,'rose':50} {'jack': 300,'rose':100} {'jack': 300,'rose':150} */ console.info(s2) 

1.4 二维数组的处理

let arr = [ ['红色','黑色','白色'], ['16G','32G'], ['移动版','联通版'] ] 结果: [ [ '红色', '16G', '移动版' ], [ '红色', '16G', '联通版' ], [ '红色', '32G', '移动版' ], [ '红色', '32G', '联通版' ], [ '黑色', '16G', '移动版' ], [ '黑色', '16G', '联通版' ], [ '黑色', '32G', '移动版' ], [ '黑色', '32G', '联通版' ], [ '白色', '16G', '移动版' ], [ '白色', '16G', '联通版' ], [ '白色', '32G', '移动版' ], [ '白色', '32G', '联通版' ] ] 
  • 步骤一:第一组处理
讯享网//案例3: let arr = [ ['红色','黑色','白色'], ['16G','32G'] ] //reduce let s = arr.reduce( (res,current,index)=>{ 
    //处理第一组 if(index == 0){ 
    //遍历第一组 current.forEach(item=>{ 
    res.push([item]) }) } return res } ,[]) console.info(s) 
  • 步骤二:之后处理
let arr = [ ['红色','黑色','白色'], ['16G','32G'], ['移动版','联通版'] ] //reduce let s = arr.reduce( (res,current,index)=>{ 
    //处理第一组 if(index == 0){ 
    //遍历第一组 current.forEach(item=>{ 
    res.push([item]) }) } else { 
    //其他行 // res 获得第一行准备数组 let newArr = [] res.forEach(tempArr=>{ 
    // 当前行获得需要处理 current.forEach(ele=>{ 
    // console.info([...tempArr , ele]) newArr.push([...tempArr, ele ]) }) }) res = newArr } return res } ,[]) 

1.5 二维数组 处理结果为对象

讯享网let arr = [ ['红色','黑色','白色'], ['16G','32G'], ['移动版','联通版'] ] 结果: [ {'attr0': '红色', 'attr1':'16G', 'attr2':'移动版' }, {'attr0': '红色', 'attr1':'16G', 'attr2':'联通版' }, {'attr0': '红色', 'attr1':'32G', 'attr2':'移动版' }, {'attr0': '红色', 'attr1':'32G', 'attr2':'联通版' }, {'attr0': '黑色', 'attr1':'16G', 'attr2':'移动版' }, {'attr0': '黑色', 'attr1':'16G', 'attr2':'联通版' }, {'attr0': '黑色', 'attr1':'32G', 'attr2':'移动版' }, {'attr0': '黑色', 'attr1':'32G', 'attr2':'联通版' }, {'attr0': '白色', 'attr1':'16G', 'attr2':'移动版' }, {'attr0': '白色', 'attr1':'16G', 'attr2':'联通版' }, {'attr0': '白色', 'attr1':'32G', 'attr2':'移动版' }, {'attr0': '白色', 'attr1':'32G', 'attr2':'联通版' } ] 
let arr = [ ['红色','黑色','白色'], ['16G','32G'], ['移动版','联通版'] ] //reduce let s = arr.reduce( (res,current,index)=>{ 
    //第一个数组 if(index == 0) { 
    current.forEach(ele=>{ 
    res.push({ 
   ['attr' + index] : ele }) }) } else { 
    //其他数组 let newArr=[] res.forEach(obj=>{ 
    current.forEach(ele=>{ 
    // console.info({ ...obj, ['attr'+index] : ele}) newArr.push({ 
    ...obj, ['attr' +index] : ele}) }) }) res = newArr } return res } , []) console.info(s) 
小讯
上一篇 2025-03-16 10:12
下一篇 2025-01-16 08:54

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/122918.html