当前位置: 首页 > news >正文

JS中map()与forEach()的用法

相同点:

1.都是循环遍历数组中的每一项

2.每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组)

3.匿名函数中的this都是指向window

4.只能遍历数组

不同点:

map()

map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值

也就是map()进行处理之后返回一个新的数组

⚠️注意:map()方法不会对空数组进行检测

map方法不会改变原始数组

var arr = [0,2,4,6,8];

var str = arr.map(function(item,index,arr){

console.log(this);    //Window

console.log(this);

console.log(item);

console.log('原数组arr:',arr);   // 会执行五次

return item/2;
},this);

console.log(str); //[0,1,2,3,4]

forEach

forEach方法用于调用数组的每个元素,将元素传给回调函数

⚠️注意: forEach对于空数组是不会调用回调函数的 ,

没有返回一个新数组&没有返回值

应用场景:为一些相同的元素,绑定事件处理器!

不可链式调用 

var arr = [0,2,4,6,8]
var sum =0;
var str = arr.forEach(item,index,arr)
{
sum+= item;
console.log("sum的值为:",sum);
}

我们先来看两者之间的相同之处

var arr = ['a','b','c','d'];

arr.forEach(function(item,index,arr){    //item表示数组中的每一项,index标识当前项的下标,arr表示当前数组
    console.log(item);
    console.log(index);
    console.log(arr);
    console.log(this);
},123);      //这里的123参数,表示函数中的this指向,可写可不写,如果不写,则this指向window


arr.map(function(item,index,arr){   //参数含义同forEach
    console.log(item);
    console.log(index);
    console.log(arr);
    console.log(this);
},123);

运行之后,可以看出两者参数没有任何的区别,除此之外两者之间还有一个特性,就是不能停止里面的遍历,除非程序报错,那么两者之间的区别在那里呢???

在于返回值!!!

var a = arr.forEach(function(item,index,arr){ 
    return 123
});
var b = arr.map(function(item,index,arr){
    return 123
}); 
console.log(a);    //undefined
console.log(b);    //[123,123,123,123]

我们可以利用map的这个特性做哪些事情呢,比如

var b = arr.map(function(item,index,arr){
    return item+'a';
}); 

console.log(b); //["aa", "ba", "ca", "da"]

 

// 之前我们的循环是这样的  
for (var index = 0; index < myArray.length; index++) {  
  console.log(myArray[index]);  
}  
// 从ES5开始提供这样的for循环  
myArray.forEach(function (value) {  
  console.log(value);  
});  
// 在ES6我们还可以这样任性  
// 循环下标或者key(for-in)  
for (var index in myArray) {    // don't actually do this  
  console.log(myArray[index]);  
}  
  
// 循环value(for-of)  
for (var value of myArray) {  
  console.log(value);  
}  
  
// 甚至直接循环key和value,no problem  
for (var [key, value] of phoneBookMap) {  
  console.log(key + "'s phone number is: " + value);  
}  
  
// 或者更者我们这样“优雅”的循环对象(貌似和ES6没有关系)  
for (var key of Object.keys(someObject)) {  
  console.log(key + ": " + someObject[key]);  
}  
// 现场实例,我们这样使用  
var items = [...];  
items.forEach((item, i) => {  
      if (item.status == 'new') this.apply(item, i)  
});  

 

转载于:https://www.cnblogs.com/yuer20180726/p/11193927.html

相关文章:

  • C#实现Form窗口最大化(最小化)
  • 论文阅读 Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM...
  • 网络安全 简要记录
  • 【Linux】tar压缩解压缩笔记
  • Android App 实现分享功能及将应用加入分享列表 (分享功能可自定义需要分享的APP)...
  • 扩展C#与元编程
  • thinkphp session 跨域问题解决方案
  • 并行相关文章安全集合写的很好
  • Java List中数值排序
  • 蓝书《广搜的优化》整理
  • 树上染色+可怜与超市(树状DP)
  • MySQL修改最大连接数的两个方法,偏爱第一种
  • Spring Boot
  • 开放封闭原则 Open-Closed Principle(OCP)
  • 迅为iMX6Q开发板设备树内核-注册驱动例程介绍
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Docker下部署自己的LNMP工作环境
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • exif信息对照
  • github指令
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java 网络编程(2):UDP 的使用
  • mysql常用命令汇总
  • Python爬虫--- 1.3 BS4库的解析器
  • QQ浏览器x5内核的兼容性问题
  • Selenium实战教程系列(二)---元素定位
  • storm drpc实例
  • underscore源码剖析之整体架构
  • 对象引论
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端面试之闭包
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Docker 部署 Spring Boot项目
  • 通信类
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 学习笔记TF060:图像语音结合,看图说话
  • 一天一个设计模式之JS实现——适配器模式
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • $forceUpdate()函数
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (js)循环条件满足时终止循环
  • (笔试题)合法字符串
  • (二)windows配置JDK环境
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)shell调试方法
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Framework杂记
  • .NET轻量级ORM组件Dapper葵花宝典
  • @font-face 用字体画图标