先来了解下原生 map 函数。
map 函数用于对数组元素进行迭代遍历,返回一个新函数并不影响原函数的值。
map 函数接受一个 callback 函数以及执行上下文参数,callback 函数带有三个参数,分别是迭代的当前值,迭代当前值的索引下标以及迭代数组自身。map 函数会给数组中的每一个元素按照顺序执行一次 callback 函数。
实现:
for 循环
实现思路其实挺简单,使用 for 循环对原数组进行遍历,每个元素都执行一遍回调函数,同时将值赋值给一个新数组,遍历结束将新数组返回。
将自定义的 _map 函数依附在 Array 的原型上,省去了对迭代数组类型的检查等步骤。
Array.prototype._map = function(iteratee, context) { var arr = this; var newArr = []; for(var i=0; i<arr.length; i++) { newArr[i] = iteratee.call(context, arr[i], i, arr); } return newArr; }