JS实现手写 forEach算法示例


Posted in Javascript onApril 29, 2020

本文实例讲述了JS实现手写 forEach算法。分享给大家供大家参考,具体如下:

手写 forEach

forEach()方法对数组的每个元素执行一次提供的函数

arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);

  • callback

    • currentValue
      数组中正在处理的当前元素。
    • index 可选
      数组中正在处理的当前元素的索引。
    • array 可选
      forEach() 方法正在操作的数组。
    • thisArg 可选
      可选参数。当执行回调函数 callback 时,用作 this 的值。
  • 没有返回值

如果提供了一个 thisArg 参数给 forEach 函数,则参数将会作为回调函数中的 this 值。否则 this 值为 undefined。回调函数中 this 的绑定是根据函数被调用时通用的 this 绑定规则来决定的。

let arr = [1, 2, 3, 4];

arr.forEach((...item) => console.log(item));

// [1, 0, Array(4)] 当前值
function Counter() {
 this.sum = 0;
 this.count = 0;
}

// 因为 thisArg 参数(this)传给了 forEach(),每次调用时,它都被传给 callback 函数,作为它的 this 值。
Counter.prototype.add = function(array) {
 array.forEach(function(entry) {
  this.sum += entry;
  ++this.count;
 }, this);
 // ^---- Note
};

const obj = new Counter();
obj.add([2, 5, 9]);
obj.count;
// 3 === (1 + 1 + 1)
obj.sum;
// 16 === (2 + 5 + 9)
  • 每个数组都有这个方法
  • 回调参数为:每一项、索引、原数组
Array.prototype.forEach = function(fn, thisArg) {
 var _this;
 if (typeof fn !== "function") {
  throw "参数必须为函数";
 }
 if (arguments.length > 1) {
  _this = thisArg;
 }
 if (!Array.isArray(arr)) {
  throw "只能对数组使用forEach方法";
 }

 for (let index = 0; index < arr.length; index++) {
  fn.call(_this, arr[index], index, arr);
 }
};

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
Dec 29 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
Aug 24 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
vue货币过滤器的实现方法
Apr 01 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
Node.js API详解之 querystring用法实例分析
Apr 29 #Javascript
Node.js API详解之 string_decoder用法实例分析
Apr 29 #Javascript
深入浅析vue全局环境变量和模式
Apr 28 #Javascript
你准备好迎接vue3.0了吗
Apr 28 #Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 #Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 #Javascript
JS求解两数之和算法详解
Apr 28 #Javascript
You might like
PHPMyAdmin 快速配置方法
2009/05/11 PHP
PHP eval函数使用介绍
2013/12/08 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python实现求最长回文子串长度
2018/01/22 Python
django2.0扩展用户字段示例
2019/02/13 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
Java基础知识面试题
2014/03/25 面试题
中介公司区域经理岗位职责范本
2014/03/02 职场文书
青春寄语大全
2014/04/09 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
2014年教务工作总结
2014/12/03 职场文书
指导教师推荐意见
2015/06/05 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
APP界面设计技巧和注意事项
2022/04/29 杂记