1. 程式人生 > >js陣列中的find、filter、forEach、map四個方法的詳解和應用例項

js陣列中的find、filter、forEach、map四個方法的詳解和應用例項

陣列中的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);//6
console.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)

更多陣列方面的知識點選MDN