您的位置:首页 > Web前端 > JavaScript

【学习总结】对javascript中数组迭代方法的理解。

2017-01-26 00:21 555 查看
ECMAscript为Array类型定义了5个迭代方法。分别是every() /filter()/forEach()/map()/some()

每个方法都接受两个形参:数组每项都要执行的function,运行该函数的作用域对象()(可忽略);数组每项都要执行的function,必须有三个参数,数组项的值,该数组项在数组中的索引,数组对象本身。习惯上我们用(item,index,array)表示。

every():对数组的每一项都执行定义的函数,每一项都返回true,则该函数返回值为true。类似&&。

<script>
var arr1=[1,0,5,9,3];
var result=arr1.every(function(item,index,array){
if(item<=10)
return item;
})
console.log(result);//false
</script>


这块代码,数组的每一项都满足if条件,但每一项的返回值并不一定是true,每一项的返回值由return决定,而return 时存在隐形类型转化,这里的是由于数组中有一个item为0,return后自动转化为false.

<script>
var arr1=[1,-1,5,9,3];
var text=new Array();
var result=arr1.every(function(item,index,array){
if(item<=10)
return text[text.length]=item+1;
})
console.log(result);//false
console.log(text);//[2, 0]
</script>


every()函数存在短路现象,即在遍历对象数组时,只要出现返回值为false,则立马结束遍历,返回结果false。不一定会遍历对象数组的所有项。

filter():对数组每一项都执行定义的函数,返回该函数会返回true的项组成的数组。

var arr1=[1,-1,5,9,3];
var result=arr1.filter(function(item,index,array){
if(item<10){
return item+1;
}
})
console.log(result);//[1,5,9,3]


返回值由return 后的语句决定。如arr1[1]执行函数后,函数的返回值为false。

返回的数组一定是对象数组的子集或者相等或为 [] (空数组)。

forEach():对数组的每一项执行定义的函数,该方法没有返回值。

var arr1=[1,-1,5,9,3];
var sum=0;
arr1.forEach(function(item,index,array){
sum+=item;
})
console.log(sum);//17


虽然forEach()函数没有返回值,但一定会遍历对象数组每一项。比for遍历好用。

map():对数组的每一项执行定义的函数,返回每次函数调用结果组成的数组。

var arr1=[1,-1,5,9,3];
var sum=0;
var result=arr1.map(function(item,index,array){
if(item<10){
return item+1;
}
})
console.log(result);


与filter()很类似,会遍历数组的每一项,返回数组中的值由return 后的语句决定。

some():对数组的每一项都会执行定义的函数,如果该函数对任一项返回true,则返回true。类似||。

var arr1=[1,-1];
var text=new Array();
var result=arr1.some(function(item,index,array){
if(item<10){
text[text.length]=item+1;
return item;
}
})
console.log(result);//true
console.log(text);//[2]


存在短路现象。即在遍历对象数组时,只要出现返回值为ture,则立马结束遍历,返回结果true。不一定会遍历对象数组的所有项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息