forEach语法
Array.forEach(function(元素,索引,当前调用的数组))
先看一个实例:
var arr=['A1','A2','A3','A4']
arr.forEach(function(item,i,array){
console.log(item,i,array);
})
输出:
A1 0 (4) ["A1", "A2", "A3", "A4"]
A2 1 (4) ["A1", "A2", "A3", "A4"]
A3 2 (4) ["A1", "A2", "A3", "A4"]
A4 3 (4) ["A1", "A2", "A3", "A4"]
若想加入break,continue则会报错,那forEach是如何跳出的,只能借用return,如下:
var arr=['A1','A2','A3','A4']
arr.forEach(function(item,i,array){
if(i==1){
return;
}
console.log(item,i,array);
})
执行结果
A1 0 (4)?["A1", "A2", "A3", "A4"]
A3 2 (4)?["A1", "A2", "A3", "A4"]
A4 3 (4)?["A1", "A2", "A3", "A4"]
类似continue的功能,但是却无法做到break中单循环的效果,所以自己来写一个forEach,优化一下:
先写能执行循环的:
Array.prototype.myForEach=function(fn){
for(var i=0,len=this.length;i<len;i++){
fn(this[i],i,this);
}
}
var arr=['A1','A2','A3','A4']
arr.myForEach(function(item,i,array){
console.log(item,i,array);
})
输出:
A1 0 (4) ["A1", "A2", "A3", "A4"]
A2 1 (4) ["A1", "A2", "A3", "A4"]
A3 2 (4) ["A1", "A2", "A3", "A4"]
A4 3 (4) ["A1", "A2", "A3", "A4"]
再加入break continue功能(还是用到了return ,return 'break' ;return 'continue' 这样用)
Array.prototype.myForEach=function(fn){
var ret;
for(var i=0,len=this.length;i<len;i++){
ret = fn(this[i],i,this);
if(ret==='continue'){
continue;
}else if(ret==='break'){
break;
}
}
}
var arr=['A1','A2','A3','A4']
arr.myForEach(function(item,i,array){
if(i==1){
return 'break';
}
console.log(item,i,array);
})
看输出(这是break,注意用 return 'break')
A1 0 (4) ["A1", "A2", "A3", "A4"]
再看一下continue(用return 'continue')
Array.prototype.myForEach=function(fn){
var ret;
for(var i=0,len=this.length;i<len;i++){
ret = fn(this[i],i,this);
if(ret==='continue'){
continue;
}else if(ret==='break'){
break;
}
}
}
var arr=['A1','A2','A3','A4']
arr.myForEach(function(item,i,array){
if(i==1){
return 'continue';
}
console.log(item,i,array);
})
输出:
A1 0 (4)?["A1", "A2", "A3", "A4"]
A3 2 (4)?["A1", "A2", "A3", "A4"]
A4 3 (4)?["A1", "A2", "A3", "A4"]
这样我们就能达到 break、continue 的效果,欢迎指正!