前情提要:
map
函数接收一个函数作为参数,作为参数的函数接收三个参数值,分别是遍历数组的每一项元素,元素的索引和数组本身。这三个参数刚好和reduce函数接收的第一个函数参数的第2、3、4个参数是对应的。这是实现的核心
实现思路是,将每次遍历的元素,作为传入的函数的参数,并将函数执行的结果放入新的数组中。
使用reduce实现map
Array.prototype._map = function (callback) { if(typeof callback === 'function') { return this.reduce((prev,item,index,arr) => { prev.push(callback(item, index, arr)) return prev }, []) } else { console.log(new Error('callback is not function')) } } let val = [1, 5, 6]._map(item => item+ 1) console.log(val); // [2, 6, 7]
使用reduce实现filter
Array.prototype._filter = function (callback) { if(typeof callback === 'function') { return this.reduce((prev,item,index,arr) => { callback(item, index, arr) ? prev.push(item) : null return prev }, []) } else { console.log(new Error('callback is not function')) } } let val = [1, 5, 6]._filter(item => item > 2) console.log(val); // [5, 6]
标签:function,map,item,reduce,filter,callback,prev From: https://www.cnblogs.com/alwaysrun/p/17179787.html