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

来源:互联网 发布:淘宝商家怎么上传商品 编辑:程序博客网 时间:2024/05/16 03:15

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。不一定会遍历对象数组的所有项。

1 0