点个关注不迷路,各位大老爷们,多交流交流哇~~~~
map()和foreach()都是数组的方法,都可以遍历数组。且都是ES6中的方法。面试时也经常会被问到map和foreach的区别是什么。手写一个简易的map和foreach可以更加直观的了解到他们之间的区别
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
代码如下(示例):
let arr = ["111", "22", "33"]
// 实现一个map
Array.prototype.myMap = function(cb){
let newArr=[]
let _this=this
for(let i=0;i<_this.length;i++){
newArr.push(cb(this[i],i,_this))
}
return newArr
}
由代码可以看出 我们返回了一个新的数组。
代码如下(示例):
Array.prototype.myForeach = function(cb, arr){
let _this=this
if(typeof cb !== 'function' ){
throw new TypeError (cb + 'is not a function')
}
for(let i=0;i<_this.length;i++){
cb.call(_this,this[i],i,arr)
}
}
可以看出代码并未返回任何值
1、都会循环遍历数组中的每一项
2、匿名函数中的this都是指向window
3、只能遍历数组
4、forEach 和 map都相当于封装好的单层for循环,三个值都相同。
1、map会返回一个新数组,foreach不会返回新数组
2、foreach允许callback更改原始数组的元素,map不会更改原始数组
点赞关注不迷路~~~