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 相关文章推荐
js 本地预览的简单实现方法
Feb 18 Javascript
JS数组array元素的添加和删除方法代码实例
Jun 01 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
如何处理JSON中的特殊字符
Nov 30 Javascript
微信小程序 登陆流程详细介绍
Jan 17 Javascript
Bootstrap警告(Alerts)的实现方法
Mar 22 Javascript
js实现适配不同的屏幕大小
Apr 10 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
在React项目中使用Eslint代码检查工具及常见问题
Oct 10 Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
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
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
Python给你的头像加上圣诞帽
2018/01/04 Python
python实现内存监控系统
2021/03/07 Python
详解python中的Turtle函数库
2018/11/19 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
应届医学毕业生求职信分享
2013/12/02 职场文书
工厂保洁员岗位职责
2013/12/04 职场文书
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
入股协议书
2014/04/14 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
会计实训总结范文
2015/08/03 职场文书
高中地理教学反思
2016/02/19 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
SpringBoot Http远程调用的方法
2022/08/14 Java/Android