【學習總結】對javascript中數組迭代方法的理解。


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。不一定會遍歷對象數組的所有項。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com