原生js源码之Array的reduce方法
2023-09-11 14:21:46 时间
reduce
方法对数组中的每个元素执行一个由您提供函数,将其结果汇总为单个返回值。
语法:
arr.reduce(callback(accumulator, item[, index[, array]])[, initialValue])
arr:原数组
callback:回调函数
accumulator:累加器
item:当前元素
index:当前索引
array:原数组
initialValue:初始值(可选),如果没有填写则默认取数组的第一个元素,若此时数组是空数组则会报错。
下面来写一下代码:
Array.prototype.myReduce=function(callback,initValue){
//如果没有传入回调函数,则报错
if(!callback) throw new TypeError('undefined is not a function');
if (typeof callback !== 'function') {//传入的不是函数也报错
throw new TypeError(callback + " is not a function");
}
var res,n=0;//定义返回结果以及定义数组循环开始的下标
if(initValue){//如果有设置初始值
res = initValue;
}else{//如果没有初始值则把数组的第一个元素赋值给返回结果
if(this.length===0){
throw new TypeError('Reduce of empty array with no initial value');
}else{//将第一个数组元素作为初始值
res = this[0];
n=1;//那数组循环的下标就应该是1
}
}
for(var i=n,len=this.length;i<len;i++){
res = callback(res,this[i],i,this);//将函数的返回值赋值给返回结果
}
return res;//返回结果
}
测试一下:
var arr = [1,3,5,7,9]
var res=arr.myReduce(function(sum,item,index,thisArr){
return sum+item
});
console.log(res);
输出:25
再设置一下初始值10试一下:
输出:35
结果正常
写一个测试去重的代码测试 :
var arr2 = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
var res2=arr2.myReduce(function(sum,item,index,thisArr){
if(sum.indexOf(item)==-1){
sum.push(item)
}
return sum
},[]);
console.log(res2)
输出:
(5) ["a", "b", "c", "e", "d"]
这种要求返回数组的需要设置初始值,否则会报错
完成收工!
相关文章
- [Node.Js] Session 保存用户信息
- Js apply 方法 详解
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"@"
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- js前端3des加密 后台java解密
- JS监听不到被操作后dom的事件,js动态生成的DOM绑定事件失效,解决方案
- js字符串方法中replace()与toUpperCase()是否会更改原字符串问题
- js 实现call和apply方法,超详细思路分析
- JS中数组去重的几种方法
- js判断数字、整数、字符串、布尔,特殊方法
- js中几种实用的跨域方法原理详解
- 擅于使用JS的eval方法
- 2014第3周三JS进阶书籍
- JS 数组去重的多种方法
- GIS教程之将 Plotly.js 与 Angular 一起使用
- 聊聊JS动画库:Velocity.js
- js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素
- 在IE中,JS方法名和input的name重名时,调用该方法无效
- 在CentOS 7上安装Node.js的4种方法(yum安装和源码安装)
- js绝对地址图片转换成base64的方法
- js中的instanceof运算符
- 原生js源码之JavaScript的apply方法
- 原生js源码之Object.values方法
- 原生js源码之Object.keys()方法
- 原生js源码之Array数组的every方法
- 原生js源码之JavaScript的trim方法
- JS类、对象、方法、prototype、_proto_
- vue的响应式都用它来实现,js中强大的Object.defineProperty()方法