一、定義
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 的值,就會改變原陣列...