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插件分享
May 22 Javascript
js+css绘制颜色动态变化的圈中圈效果
Jan 27 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
js制作支付倒计时页面
Oct 21 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
基于Vue实例对象的数据选项
Aug 09 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
Apr 10 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 Javascript
Vue之封装公用变量以及实现方式
Jul 31 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 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之XML转数组函数的详解
2013/06/07 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
vue实现评论列表功能
2019/10/25 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python 多线程应用介绍
2012/12/19 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python3遍历目录树实现方法
2015/05/22 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
python requests.get带header
2020/05/05 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
毕业生的自我鉴定
2013/10/29 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
2014年实习生工作总结
2014/11/27 职场文书
丧事答谢词
2015/01/05 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
创业计划书之网吧
2019/10/10 职场文书
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫