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 美元符冲突的解决方法
Mar 28 Javascript
jquery高效反选具体实现
May 05 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
VueJS如何引入css或者less文件的一些坑
Apr 25 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
vue.js移动端app实战1:初始配置详解
Jul 24 Javascript
Vue自定义事件(详解)
Aug 19 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
VUE2 前端实现 静态二级省市联动选择select的示例
Feb 09 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
js url传值中文乱码之解决之道
2009/11/20 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
详解Python的单元测试
2015/04/28 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python 专题四 文件基础知识
2017/03/20 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python异常触发及自定义异常类解析
2019/08/06 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Python中return函数返回值实例用法
2020/11/19 Python
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
网络教育自我鉴定
2014/02/04 职场文书
九年级语文教学反思
2014/02/04 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
机械系毕业生求职信
2014/05/28 职场文书
出纳岗位职责
2015/01/31 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
校园安全主题班会
2015/08/12 职场文书
Android studio 简单计算器的编写
2022/05/20 Java/Android