js數組中的find、filter、forEach、map四個方法的詳解和應用實例


 
原文:https://blog.csdn.net/lhjuejiang/article/details/80112547
 
數組中的find、filter、forEach、map四個語法很相近,為了方便記憶,真正的掌握它們的用法,所以就把它們總結在一起嘍。
find():返回通過測試的數組的第一個元素的值
在第一次調用 callback 函數時會確定元素的索引范圍,因此在 find 方法開始執行之后添加到數組的新元素將不會被 callback 函數訪問到。如果數組中一個尚未被callback函數訪問到的元素的值被callback函數所改變,那么當callback函數訪問到它時,它的值是將是根據它在數組中的索引所訪問到的當前值。被刪除的元素仍舊會被訪問到。
 
語法:
array.find(function(value, index, arr),thisValue)
value:必須,代表當前元素,其他四個參數都是可選,index代表當前索引值,arr代表當前的數組,thisValue代表傳遞給函數的值,一般用this值,如果這個參數為空,undefined會傳遞給this值
返回值:返回符合測試條件的第一個數組元素的值,如果沒有符合條件的則返回undefined。
 var arr = [1,2,3,4,5,6,7]; var ar = arr.find(function(elem){     return elem>5; }); console.log(ar);//6console.log(arr);//[1,2,3,4,5,6,7]
find()方法為數組中的每個元素都調用一次函數執行,當數組中的元素在測試條件時返回true,find()返回符合條件的元素,之后的值不會再執行函數。如果沒有符合條件的元素則返回undefined。
filter():創建一個新數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素
filter 遍歷的元素范圍在第一次調用 callback 之前就已經確定了。在調用 filter 之后被添加到數組中的元素不會被 filter 遍歷到。如果已經存在的元素被改變了,則他們傳入 callback 的值是 filter 遍歷到它們那一刻的值。被刪除或從來未被賦值的元素不會被遍歷到。
 
語法:
array.filter(function(value, index, arr),thisValue)
value:必須,代表當前元素,其他四個參數都是可選,index代表當前索引值,arr代表當前的數組,thisValue代表傳遞給函數的值,一般用this值,如果這個參數為空,undefined會傳遞給this值
返回值:返回數組,包含了符合條件的所有元素,如果沒有符合條件的則返回空數組
 var arr = [1,2,3,4,5,6,7]; var ar = arr.filter(function(elem){     return elem>5; }); console.log(ar);//[6,7]console.log(arr);//[1,2,3,4,5,6,7]
map():返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值,map()方法按照原始數組元素順序依次處理元素
map方法會給原數組中的每個元素都按順序調用一次callback函數,callback每次執行后的返回值(包括undefined)組合起來形成一個新數組。callback函數只會在有值的索引上被調用,那些從來沒被賦過值或者使用delete刪除的索引則不會被調用。
使用map方法處理數組時,數組元素的范圍是在callback方法第一次調用之前就已經確定了。在map方法執行的過程中,原數組中新增加的元素將不會被callback訪問到,若已經存在的元素被改變或刪除了,則他們傳遞到callback的值是map方法遍歷到他們的那一刻的值,而被刪除的元素將不會被訪問到。
 
語法:
array.map(function(value, index, arr),thisValue)
value:必須,代表當前元素,其他四個參數都是可選,index代表當前索引值,arr代表當前的數組,thisValue代表傳遞給函數的值,一般用this值,如果這個參數為空,undefined會傳遞給this值
返回值:返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值
 var arr = [1,2,3,4,5,6,7]; var ar = arr.map(function(elem){    return elem*4; }); console.log(ar);//[4, 8, 12, 16, 20, 24, 28]console.log(arr);//[1,2,3,4,5,6,7]
 
forEach():用於調用數組每個元素,並將元素傳遞給回調函數(注意沒有辦法跳出或終止forEach語句,除非拋出異常)
 

forEach 遍歷的范圍在第一次調用 callback 前就會確定。調用forEach 后添加到數組中的項不會被 callback 訪問到。如果已經存在的值被改變,則傳遞給 callback 的值是 forEach 遍歷到他們那一刻的值。已刪除的項不會被遍歷到
 
語法:
array.forEach(function(value, index, arr),thisValue)
value:必須,代表當前元素,其他四個參數都是可選,index代表當前索引值,arr代表當前的數組,thisValue代表傳遞給函數的值,一般用this值,如果這個參數為空,undefined會傳遞給this值
返回值:undefined
 var arr = [1,2,3,4,5,6,7]; var sum = 0; var ar = arr.forEach(function(elem){    sum+=elem*4; }); console.log(ar);//undefined console.log(arr);//[1,2,3,4,5,6,7] console.log(sum);//112
forEach()返回值為undefined,里面即便有return語句,返回值依然是undefined
嗯、現在總結一下
從上面的內容我們可以看出,上面的四個語法以及參數的意義是一樣的,而且都不會對空數組進行檢測,也不會改變原始數組
現在說說各自的意義:

find()方法主要用來返回數組中符合條件的第一個元素(沒有的話,返回undefined)
filter()方法主要用來篩選數組中符合條件的所有元素,並且放在一個新數組中,如果沒有,返回一個空數組
map()方法主要用來對數組中的元素調用函數進行處理,並且把處理結果放在一個新數組中返回(如果沒有返回值,新數組中的每一個元素都為undefined)
forEach()方法也是用於對數組中的每一個元素執行一次回調函數,但它沒有返回值(或者說它的返回值為undefined,即便我們在回調函數中寫了return語句,返回值依然為undefined)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM