forEach
forEach中this的指向
data.forEach(function(value, index, array){
console.log(this)
//指向window
})
data.forEach(function(value, index, array){
console.log(this)
//指向第二个参数 {name:'test'}
},{name:'test'})
data.forEach(function(value, index, array){
console.log(this)
//指向第二个参数 Boolean对象
//true 布尔值 new Boolean(true) 布尔值对象
//如果传 0 Number对象
//如果传'1' String对象
//第二个参数是对象,如果传的是原始值最后都会转为对象
},true)
封装forEach
Array.prototype.myforEach=function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window;
for(var i=0 ; i<len ; i++){
fn.apply(arg2, [arr[i], i, arr],)
}
}
filter
filter的this指向与forEach相同,filter的问题是操作会改变原数组
封装filter
Array.prototype.myFilter=function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
nArr = [];
for(var i=0 ; i<len ; i++){
fn.apply(arg2, [arr[i], i, arr]) ? nArr.push(arr[i]) : '';
}
return nArr
}
map
map的this指向与forEach相同,map操作会改变原数组
Array.prototype.myMap=function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
nArr = [];
for(var i=0; i<len; i++){
newArr.push(fn.apply(arg2, [arr[i], i, arr]))
}
return nArr
}
every
var res = data.every(function(val,index,arr){
//data在回调函数中遍历的时候,必须要全部返回true,得到的res才是true,遇到false则中断遍历(如果没有写返回值,默认返回undefined,即false)
},{name:'test'})
封装every
Array.protptype.myEvery=function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
res = true;
for(var i=0; i<len; i++){
if(!fn.apply(args, [arr[i], i, arr])){
res=false;
break
}
}
return res;
}
some
var res = data.some(function(val,index,arr){
//data在回调函数中遍历的时候,只要有一个返回true,res就为true,遇到true则中断遍历(如果没有写返回值,默认返回undefined,即false)
},{name:'test'})
封装some
Array.protptype.mySome=function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
res = false;
for(var i=0; i<len; i++){
if(fn.apply(args, [arr[i], i, arr])){
res=true;
break
}
}
return res;
}
reduce
封装reduce
Array.prototype.myReduce = function(fn, initialValue){
var arr = this,
len = arr.length,
arg3 = arguments[2] || window;
for(var i=0; i<len; i++){
fn.apply(arg3, [initialValue, arr[i], i, arr])
}
return initialValue;
}
封装reduceRight
Array.prototype.myReduceRight = function(fn, initialValue){
var arr = this,
len = arr.length,
arg3 = arguments[2] || window;
for(var i=len-1; i>0; i--){
fn.apply(arg3, [initialValue, arr[i], i, arr])
}
return initialValue;
}