定义
我们首先来看一看MDN上对Map和ForEach的定义:
- forEach(): 针对每一个元素执行提供的函数。
- map(): 创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来。
- 到底有什么区别呢?forEach()方法不会返回执行结果,而是undefined。也就是说,forEach()会修改原来的数组。而map()方法会得到一个新的数组并返回。
来一个示例
定义一个数组对象,通过遍历获取到每一个对象内的name值,并赋值给一个新的数组
var arr = [
{'name':'a','age':18},
{'name':'b','age':18},
{'name':'c','age':18},
{'name':'d','age':18}
]
var arr1 = arr.map((item, i) => item.name)
var arr2 = arr.forEach((item, i) => item.name)
console.log(arr1)
console.log(arr2)
可以看到的是,map可以正常输出结果,而forEach是undefined
不仅如此,map后面还可以跟复合(composition)(map(), filter(), reduce()等组合使用)
比如
我想在返回的结果里把name是b的结果过滤掉
示例
var arr = [
{'name':'a','age':18},
{'name':'b','age':18},
{'name':'c','age':18},
{'name':'d','age':18}
]
var arr1 = arr.map((item, i) => item.name).filter(item=>item!='b')
console.log(arr1)
输出结果
输出的新数组内容里把name是b的数据过滤掉了