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');
js-reduce方法源码的更多相关文章
- Vue.js 2.0源码解析之前端渲染篇
一.前言 Vue.js框架是目前比较火的MVVM框架之一,简单易上手的学习曲线,友好的官方文档,配套的构建工具,让Vue.js在2016大放异彩,大有赶超React之势.前不久Vue.js 2.0正式 ...
- 从发布订阅模式入手读懂Node.js的EventEmitter源码
前面一篇文章setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop详细讲解了浏览器和Node.js的异步API及其底层原理Event Loop.本文会讲一下不 ...
- PureMVC(JS版)源码解析:总结
PureMVC源码中设计到的11个类已经全部解析完了,回首想想,花了一周的时间做的这点事情还是挺值得的,自己的文字组织表达能力和对pureMVC的理解也在写博客的过程中得到了些提升.我也是第一次写系列 ...
- Java split方法源码分析
Java split方法源码分析 public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 bool ...
- PureMVC(JS版)源码解析
PureMVC(JS版)源码解析:总结 PureMVC源码中设计到的11个类已经全部解析完了,回首想想,花了一周的时间做的这点事情还是挺值得的,自己的文字组织表达能力和对pureMVC的理解也在写 ...
- erlang下lists模块sort(排序)方法源码解析(二)
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...
- erlang下lists模块sort(排序)方法源码解析(一)
排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不 ...
- getOrCreateEnvironment()方法源码探究
该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建web环境对象,还是标准非web环境对象. 首先该方法源于prepareEnvironment准备环境: 然后进入该方法源码: 可以发现: ...
- TreeSet集合的add()方法源码解析(01.Integer自然排序)
>TreeSet集合使用实例 >TreeSet集合的红黑树 存储与取出(图) >TreeSet的add()方法源码 TreeSet集合使用实例 package cn.itca ...
随机推荐
- ELK集中化日志解决方案——看这一篇全搞定
一.前言 在软件发开技术管理里有两个永恒经典的问题,适合我们初到一家软件企业或一家公司的科技团队,来判断自己该从哪里入手帮助整个团队提升科技水平和产能.问题一是"在我们团队里,只涉及一行代码 ...
- [算法笔记-题解]问题 D: 习题4-4 三个整数求最大值
问题 D: 习题4-4 三个整数求最大值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数. 输入 ...
- IPv6地址格式
1.说明 IPv6是互联网协议的第六版, 现有IPv4只支持大概40亿个网络地址, 而IPv6支持3.4e38个网络地址. IPv4的地址长度是32位(bit), IPv6的地址长度是128位. 尽管 ...
- MySQL数据库安装Version5.7
MySQL数据库版本: mysql-5.7.22-linux-glibc2.12-x86_64 Linux服务器系统: CentOS 7.4 64bit MySQL安装用户: mysql/aliyun ...
- [ vue ] quasar框架踩坑:在vue文件外导入路由,执行router.push('/')没有效果
问题描述: 1. 如图所示的项目结构目录, axios.js 文件负责拦截全局请求和回复,我在拦截回复的代码中写了:如果服务器回复了一个401错误,则执行Router.push('/'),但是该方法失 ...
- 关于在Vue中使用WebScoket的随笔
声明:请勿直接复制粘贴抄袭文章,若有需要,请规范转载,注明出处,谢谢! ---------------------------------------------------------------- ...
- 若依(ruoyi)代码生成树表结构的那些坑
若依(RuoYI)代码生成树表结构的那些坑 相信许多做后端开发的同学,一定用过若依这款框架,这款框架易上手,适合用来做后台管理系统,但是其中也存在一些坑,稍不注意就会中招(大佬可以忽略...) 今天, ...
- Feed流系统重构-架构篇
重构,于我而言,很大的快乐在于能够解决问题. 第一次重构是重构一个c#版本的彩票算奖系统.当时的算奖系统在开奖后,算奖经常超时,导致用户经常投诉.接到重构的任务,既兴奋又紧张,花了两天时间,除了吃饭睡 ...
- 关于包装类Integer,Long比较用==和equals的问题
所有整型包装类对象之间值的比较,全部使用 equals 方法比较. 说明:对于 Integer var = ? 在-128 至 127 之间的赋值,Integer 对象是在 IntegerCache. ...
- 【Java常用类】两个Date类
两个Date类 java.util.Date类 两个构造器的使用 构造器一:Date():创建一个对应当前时间的Date对象 构造器二:创建指定毫秒数的Date对象 两个方法的使用 toString( ...