实现Array.map
实现Array.map#
📢
回调函数的参数
currentValue``callback
数组中正在处理的当前元素。index
可选callback
数组中正在处理的当前元素的索引。
array
可选map
方法调用的数组。
手写#
Array.prototype._map = function (callback, context) {
let arr = Array.prototype.slice.call(this)
let mappedArr = new Array(arr.length)
for (let index = 0; index < arr.length; index++) {
if (!arr.hasOwnProperty(index)) continue
mappedArr[index] = callback.call(context, arr[index], index, this)
}
return mappedArr
}
测试#
// case
var a = [1, 2, 3]
// console.log(a.map((v, i, data) => {
console.log(a._map((v, i, data) => {
console.log(v, i, data)
return Math.pow(v, 2)
}))
// 1 0 [ 1, 2, 3 ]
// 2 1 [ 1, 2, 3 ]
// 3 2 [ 1, 2, 3 ]
// [ 1, 4, 9 ]
手写用reduce实现map#
实现#
Array.prototype._map = function(callback, context) {
let arr = Array.prototype.slice.call(this);
let res = this.reduce((acc, cur, index, src) => {
let curRes = callback.call(context, cur, index, this, src)
acc.push(curRes);
return acc;
}, [])
return res;
}
测试#
// case
var a = [1, 2, 3]
// console.log(a.map((v, i, data) => {
console.log(a._map((v, i, data) => {
console.log(v, i, data)
return Math.pow(v, 2)
}))
// 1 0 [ 1, 2, 3 ]
// 2 1 [ 1, 2, 3 ]
// 3 2 [ 1, 2, 3 ]
// [ 1, 4, 9 ]