// 数组中的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');