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结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
Immutable 在 JavaScript 中的应用
May 02 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
Nov 22 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 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实现的mongodb操作类
2015/05/28 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
PHP单链表的实现代码
2016/07/05 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python opencv实现证件照换底功能
2019/08/19 Python
python hashlib加密实现代码
2019/10/17 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
Python 中如何写注释
2020/08/28 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
小学教师求职信范文
2015/03/20 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android