js-reduce方法源码

// 数组中的reduce方法源码复写
//先说明一下reduce原理:总的一句,reduce方法主要是把数组遍历,
//然后把数组的每个元素传入回调函数中,回调函数怎么处理,就会的到什么样的效果
Array.prototype._reduce=function(fn,initVal){
    let pre=initVal;//对初始值进行赋值
    let i=0;//数组的出事索引值
    if(!pre){//判断是否拥有初始值,如果有传初始值,下面遍历会从零开始,否则,遍历从1开始,下面遍历的第一个的pre值默认是数组的第一位元素
        pre=this[0];
        i=1;
    }
    for(i;i<this.length;i++){
        pre=fn(pre,this[i],i);//遍历处理会调函数
    }
    return pre;//返回回调函数处理的最终结果,
}

********************************以上时候自定义reduce源码,以下是对该方法的一些用法***************


// 计算一个数组中某个元素出现的次数;
let names=['张三','李四','王五','张三'];
let nameNum=names._reduce((pre,cur)=>{
    if(cur in pre){
        pre[cur]++;
    }else{
        pre[cur]=1;
    }
    return pre;
},{});
console.log(nameNum);


// 数组去重
let nameArr=names._reduce((pre,cur)=>{
    if(pre.indexOf(cur)==-1){
        pre.push(cur);
    }
    return pre;
},[]);
console.log(nameArr);

//将二维数组化为一维数组
let erweiArr=[[1,3.4,5,],[2,4,6],[213],[123,123,123]];
let yiweiArr=erweiArr.reduce((pre,cur)=>{
    pre=pre.concat(cur);
    return pre;
},[]);
console.log(yiweiArr);

let testArr=[1,2,3];
let sum=testArr._reduce((pre,cur)=>{
    return pre+cur;
},10);
console.log(sum,'sum');

 

posted @ 2021-04-08 14:23  KG-work-space  阅读(288)  评论(0编辑  收藏  举报