在手写时要先弄懂函数原理
1.map是接收三个参数(值、下标、原数组),返回一个新的数组,地址与原数组不行同
Array.prototype.newMap = function(fn) {
let _this = this//需要操作的数组
let result = []//需要返回的新数组
for(let i=0;i<_this.length;i++) {
result[i] = fn(_this[i],i,_this)
}
return result
}
var tt = [1,2,3]
tt.newMap((item,i,arr) => {
console.log(item,i,arr)
})
2.filter 也是接收三个参数(值、下标、原数组),返回过滤后为true的结果
Array.prototype.newFilter = function(fn) {
let _this = this,result = []//需要操作的数组
for(let i=0;i<_this.length;i++) {
if(fn(_this[i],i,_this)) {
result.push(_this[i])
}
}
return result
}
var tt = [1,2,3]
console.log(tt.newFilter((item,i,arr) => {
return item !== 1
}))
3.resuce是累加,接收两个参数(执行函数,初值),如果第二个参数不传的话默认为0,每次计算结果会作为下一次的第一个参数
Array.prototype.newReduce = function(fn,v = 0) {
let _this = this,result = v//需要操作的数组
for(let i=0;i<_this.length;i++) {
result = fn(result,_this[i])
}
return result
}
var tt = [1,2,3]
console.log(tt.newReduce((p,c) => p+c,0))