1.語法
- map()方法返回一個由原數(shù)組中的每個元素調(diào)用一個指定方法后的返回值組成的新數(shù)組,它不會改變原來的數(shù)組
- 用法:
let newArr = oldArr.map(callback[, thisArg])
- 參數(shù):
- callback:原數(shù)組中的元素調(diào)用該方法后返回一個新數(shù)組馁害。它接收三個參數(shù)蹂匹,分別為 currentValue、index忍啸、array
- currentValue:callback的第一個參數(shù),數(shù)組中當(dāng)前被傳遞的元素
- index(可選):callback的第二個參數(shù)计雌,數(shù)組中當(dāng)前被傳遞的元素的索引
- array(可選):callback的第三個參數(shù),調(diào)用map()方法的數(shù)組妈橄,即原數(shù)組
- thisArg(可選):執(zhí)行callback函數(shù)時this指向的對象
2.手寫
let arr = [1,2,33,4,6,7]
Array.prototype.myMap = function (callback,thisValue) {
if(Object.prototype.toString.call(callback) != "[object Function]") { //判斷傳給callback的實(shí)參是否是函數(shù)眷蚓,不是函數(shù)則報(bào)錯
throw new TypeError(callback + "is not a function!")
}
let res = [] //因?yàn)樵摲椒ú荒芨淖冊瓟?shù)組
//所以要新建一個數(shù)組來接收符合要求的數(shù)值
const _this = this
const newThis = thisValue? thisValue : _this //如果傳了thisValue則用用戶傳過來的this
_this.forEach((item,index) => { //遍歷當(dāng)前數(shù)組
res.push(callback.call(newThis,item,index,_this))
//用變量接收map方法的結(jié)果會發(fā)現(xiàn)有值所以需要return res反番,然后就是遍歷該數(shù)組,在函數(shù)對當(dāng)前元素
//進(jìn)行操作恬口,例如console.log(item)就是把當(dāng)前的元素打印出來,所以就會有種map函數(shù)有遍歷的功能
})
return res
}
arr.myMap((item,index) => {
console.log(index + ":" + item)
//0:1
// 1:2
// 2:33
// 3:4
// 4:6
// 5:7
})