forEach 和 map 都是循环遍历数组中的每一项,那我们就深入的了解下这两个方法有什么区别,该如何使用。
相同点
- 都是循环遍历数组中的每一项
- 语法一样
第一个参数都是一个匿名函数,并且匿名函数的参数都一样,匿名函数的参数分别为item(当前每一项),index(索引值),arr(原数组)
不同点
- forEach() 不会返回数据,不用return,会更改原始数组
- map() 会返回新数组,需要return,不会更改原始数组
- map() 可以链式调用
如何使用
下面我们通过具体的代码,看看这两个方法如何使用
假设我们有个数组[1,2,3,4,5],现在我们需要让数组的每个元素加1。
- 使用forEach方法
let arr = [1,2,3,4,5]
arr.forEach(function(item,index,arr){
arr[index] = item+1;
})
console.log(arr) // [2, 3, 4, 5, 6]
- 使用map方法
let arr = [1, 2, 3, 4, 5]
let newArr = arr.map(function (item, index, arr) {
return item + 1;
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(newArr) // [2, 3, 4, 5, 6]
用哪个更好?
这个就要视情况而定了
- forEach()
假如我不想改变数据,只是想用数据做一些事情, 比如把数据打印出来,用forEach就可以
let arr = ['a', 'b', 'c', 'd'];
arr.forEach((item) => { console.log(item); });// a// b// c// d
- map()
假如有一个数组[1, 2, 3, 4, 5],我们要把数组里的每一个元素都加1,并且筛选出大于4的数据,则用map更方便,还可以和filter()组合使用
let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(num => num + 1).filter(num => num > 4);
console.log(arr2); // [5, 6]
总结
能用 forEach() 做到的,map() 也可以做到,反之亦然。那么我们应该用哪个呢,这就要视情况而定了,只要我们熟悉他们的用法,才能根据不同的情况,选择不同的函数,工作起来才能得心应手,提高效率。
网友评论