美文网首页
数组的reduce方法

数组的reduce方法

作者: 仔崽06 | 来源:发表于2020-10-17 13:53 被阅读0次

    reduce方法

    1.reduce接受一个回调函数作为参数

    let arr=[1,2,3,4]
    arr.reduce((prev,next)=>{})
    

    2.回调函数参数(prev,next,index,currenArr)

    1.perv代表上一次调用回调时的返回值,或者初始值init。
    2.next代表当前正在处理的数组元素.
    3.index代表当前执行元素的下标.
    4.currentArr代表当前循环的数组元素

    let arr = [1,2,3,4,]
    arr.reduce((prev,next,index,currenArr)=>{
        console.log(prev) 
        console.log(next)
        console.log(index) 
        console.log(currenArr)
        return prev+1
    })
    //结果
    // 1
    // 2
    // 1
    // [ 1, 2, 3, 4 ]
    // 2
    // 3
    // 2
    // [ 1, 2, 3, 4 ]
    // 3
    // 4
    // 3
    // [ 1, 2, 3, 4 ]
    

    3.init初始值,相当于给数组第一位添加了个默认值.

    let arr = [1,2,3,4]
    let newArr=arr.reduce((prev,next)=>{
       prev.push(next*2)
       return prev
    },[])
    
    console.log(newArr) //[ 2, 4, 6, 8 ]
    

    4.reduce的基本用途

    1.求和

    let arr=[1,2,3,4];
    
    let reslut=arr.reduce((prev,next)=>{
        return prev+next
    })
    console.log(reslut)
    

    2.重复次数统计

    let data=[
        {name:'zs',id:'111111'},
        {name:'zs',id:'111111'},
        {name:'ws',id:'222222'},
        {name:'ls',id:'333333'},
        {name:'cd',id:'444444'},
        {name:'ws',id:'222222'},
    ]
    
    let reslut=data.reduce((prev,next)=>{
        [next.name] in prev ? ++prev[next.name] : prev[next.name]=1
        return prev
       
    },{})
    console.log(reslut) //{ zs: 2, ws: 2, ls: 1, cd: 1 }
    

    3.计算总和

    //计算总和
    let data=[
        {
            name:'洋葱',
            money:12
        },
        {
            name:'土豆',
            money:10 
        }
    ]
    let result=data.reduce((prev,next)=>{
        return prev+next.money
    },0)
    console.log(result) //22
    

    4.数组去重

    let arr=[1,1,2,1,3,4,5,3];
    let result=arr.reduce((prev,next)=>{
       if(!prev.includes(next)){
           prev.push(next)
       }
       return prev
    },[])
    console.log(result) //[ 1, 2, 3, 4, 5 ]
    

    5.数组扁平化

    let arr=[1,2,[3,4,[5,6]]];
    let reslut=(arr)=>{
        return arr.reduce((prev,next)=>{
           return  prev.concat(Array.isArray(next) ? reslut(next):next);
        },[])
    }
    
    console.log(reslut(arr)) //[ 1, 2, 3, 4, 5, 6 ]
    

    6.合并函数 组合函数

    function str(str1,str2){
       return str1+str2
    }
    
    function strLen(str){
        return str.length
    }
    
    function strLimit(str){
        return `$ ${str}`
    }
    //优化前
    let compose=strLimit(strLen(str('123','345')))
    console.log(compose) //$ 6
    //优化后
    let compose=composeFn(str,strLen,strLimit)('123','345')
    function composeFn(...fn){
        return function(...args){ 
            let shiftFn=fn.shift();
            return fn.reduce((prev,next)=>{
                return next(prev)
            },shiftFn(...args))
        }
    }
    console.log(compose) //$ 6
    

    相关文章

      网友评论

          本文标题:数组的reduce方法

          本文链接:https://www.haomeiwen.com/subject/rqazpktx.html