陣列的forEach和map和for方法的區別

2022-07-18 03:21:11 字數 1900 閱讀 5066

一、定義

foreach():  從頭到尾遍歷陣列,為每個元素呼叫指定的函式。

map():  將呼叫的陣列的每個元素傳遞給指定的函式,並返回乙個陣列,他包含該函式的返回值。

傳遞的函式是 foreach() / map() 的第乙個引數,該函式有三個引數:陣列的元素(item)+元素的索引(index)+陣列本身(input),第二個引數是 上下文(content)。

foreach() 方法中的this 是呼叫foreach()方法的陣列;傳入的匿名函式中的this預設是window。

var ary = [12,23,24,42,1];

var res = ary.foreach(function

(item,index,input) )

console.log(res);

//undefined; //foreach()沒有返回值

console.log(ary); //

[120, 230, 240, 420, 10] // 會對原來的陣列產生改變;

var ary = [12,23,24,42,1];

var res = ary.map(function

(item,index,input) )

console.log(res);

//[120,230,240,420,10] // 有返回值

console.log(ary); //

[12,23,24,42,1] // 不會修改原陣列

二、區別總結

1、map速度比foreach快;

2、map會返回乙個跟原陣列長度相同格式相同的新陣列,且不會對原陣列產生影響,foreach不會產生新陣列;

3、map因為返回的是陣列所以可以鏈式操作,foreach不能。

推薦使用 .map() 

三、相容性問題

高階瀏覽器(包括ie9以上)支援map和foreach方法對陣列迴圈遍歷,ie6~ie8不支援map和foreach方法

四、相容性處理

(不相容的情況下在array.prototype上沒有這兩個方法),那麼需要我們自己封裝乙個都相容的方法,**如下:

1/**

2* foreach遍歷陣列

3* @param callback [function] **函式;

4* @param context [object] 上下文;5*/

6 array.prototype.myforeach = function

myforeach(callback,context)

12//

ie6-8下自己編寫**函式執行的邏輯

13for(var i = 0,len = this.length; i < len;i++) 16}

17/**18

* map遍歷陣列

19* @param callback [function] **函式;

20* @param context [object] 上下文;

21*/

22 array.prototype.mymap = function

mymap(callback,context)

27//

ie6-8下自己編寫**函式執行的邏輯

28var newary =;

29for(var i = 0,len = this.length; i < len;i++) 34}

35return

newary;

36 }

陣列的forEach方法和map方法

定義 foreach是給陣列的每乙個元素執行一次給定的函式 語法arr.foreach callback currentvalue index array thisarg 引數 callback 為每個元素執行的函式,該函式接收三個引數 currentvalue 陣列中正在處理的當前元素 index...

陣列中的forEach和map的區別

大多數情況下,我們都要對陣列進行遍歷,然後經常用到的兩個方法就是foreach和map方法。先來說說它們的共同點 map方法 1.map方法返回乙個新的陣列,陣列中的元素為原始陣列呼叫函式處理後的值。2.map方法不會對空陣列進行檢測,map方法不會改變原始陣列。3.瀏覽器支援 chrome saf...

forEach和map返回新陣列問題

以前查 foreach 和 map 的區別時,總能看到這樣一句話 foreach 方法不會返回執行結果,而是 undefined.也就是說,foreach 會修改原來的陣列.而 map 方法會得到乙個新的陣列並返回.我的理解就是使用 foreach 遍歷乙個陣列,修改 item 的值,就會改變原陣列...