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 相关文章推荐
客户端脚本中常常出现的一些问题和调试技巧
Jan 09 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
对JavaScript客户端应用编程的一些建议
Jun 24 Javascript
JQuery菜单效果的两个实例讲解(3)
Sep 17 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
快速入门Vue
Dec 19 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 Javascript
Angular Material Icon使用详解
Nov 07 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 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
node.js 抓取代理ip实例代码
2017/04/30 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
详解vue v-model
2020/08/31 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python进程类subprocess的一些操作方法例子
2014/11/22 Python
python实现的简单猜数字游戏
2015/04/04 Python
python中Genarator函数用法分析
2015/04/08 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
《莫泊桑拜师》教学反思
2014/04/23 职场文书
商务英语求职信范文
2015/03/19 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
六一儿童节致辞
2015/07/31 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
详解Python中的for循环
2022/04/30 Python