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 相关文章推荐
jQuery 设置 CSS 属性示例介绍
Jan 16 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
Jun 06 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
Feb 13 Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 Javascript
简述vue中的config配置
Jan 23 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
在vue中动态添加class类进行显示隐藏实例
Nov 09 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
使用JavaScript通过前端发送电子邮件
May 22 Javascript
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 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
深入掌握include_once与require_once的区别
2013/06/17 PHP
php解析json数据实例
2014/08/19 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
python安装twisted的问题解析
2018/08/21 Python
Python常用特殊方法实例总结
2019/03/22 Python
Form表单及django的form表单的补充
2019/07/25 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
jupyter notebook 重装教程
2020/04/16 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
python实现KNN近邻算法
2020/12/30 Python
大学自我评价
2014/02/12 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
培训班开班主持词
2015/07/02 职场文书
新闻稿格式范文
2015/07/18 职场文书
毕业感言怎么写
2015/07/31 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
Java设计模式之代理模式
2022/04/22 Java/Android
go goth封装第三方认证库示例详解
2022/08/14 Golang