1樓:匿名使用者
foreach()和map()兩個方法都是ecma5中array引進的新方法,主要作用是對陣列的每個元素執行一次提供的函式,但是它們之間還是有區別的。jquery也有一個方法$.each(),長得和foreach()有點像,功能也類似。
但是從本質上還是有很大的區別的,那麼我們探**竟。
一、foreach和map語法
語法://foreach
array.foreach(callback(currentvalue, index, array), this)
//或者
array.foreach(callback(currentvalue, index, array))
//map:
var new_array = arr.map(callback[, thisarg])
//$.each()
$(selector).each(function(index,element)) //注意引數的順序
callback: 為陣列中每個元素執行的函式,該函式接收三個引數,
引數一:當前陣列中元素;引數二:索引; 引數三:當前陣列。
this:可選,執行會掉時候,this的指向。
二、區別
2.1、foreach()返回值是undefined,不可以鏈式呼叫。
2.2、map()返回一個新陣列,原陣列不會改變。
2.3、沒有辦法終止或者跳出foreach()迴圈,除非丟擲異常,所以想執行一個陣列是否滿足什麼條件,返回布林值,可以用一般的for迴圈實現,或者用array.every()或者array.
some();
2.4、$.each()方法規定為每個匹配元素規定執行的函式,可以返回 false 可用於及早停止迴圈。
三、經典例子
3.1 在使用foreach()時候,如果陣列在迭代的視乎被修改,
則其他元素會被跳過。因為 foreach()不會在迭代之前建立陣列的副本。
3.2反轉字串
var str = '12345';
array.prototype.map.call(str, function(x) ).reverse().join('');
3.3一個筆試題。
1["1", "2", "3"].map(parseint); //結果 [1, nan, nan]
如果想得到[1, 2,3]應該這麼做
function returnint(element)
["1", "2", "3"].map(returnint);
這主要是因為 parseint()預設有兩個引數,第二個引數是進位制數。當parsrint沒有傳入引數的時候,而map()中的**函式時候,會給它傳三個引數,第二個引數就是索引,明顯不正確,所以返回nan了。
3.4....
四、相容性
foreach()和map()是ecma5新引入的,可能在標準的其他實現中不存在,在使用前可以要ployfill一下。
具體網上很多吧,更多的是在ie9以下,如果你的專案無視這些,那麼你可以不care。
2樓:北京巴卜技術****
參考如下:假設有一個陣列,每個元素是一個人。面前站了一排人。
foreach就是按順序一個一個跟他們做點什麼,具體做什麼,隨便:people.foreach(function(dude));map就是手裡拿一個盒子(一個新的陣列),一個一個叫他們把錢包扔進去。
結束的時候獲得了一個新的陣列,裡面是大家的錢包,錢包的順序和人的順序一一對應。varwallets=people.map(function(dude));reduce就是拿著錢包,一個一個數過去看裡面有多少錢啊?
每檢查一個,就和前面的總和加一起來。這樣結束的時候就知道大家總共有多少錢了。vartotalmoney=wallets.
reduce(function(countedmoney,wallet),0);
js的foreach和map方法的區別,還有一個$each
3樓:育知同創教育
oreach()和map()兩個方法都是ecma5中array引進的新方法,主要作用是對陣列的每個元素執行一次提供的函式,但是它們之間還是有區別的。jquery也有一個方法$.each(),長得和foreach()有點像,功能也類似。
但是從本質上還是有很大的區別的,那麼我們探**竟。
一、foreach和map語法
語法://foreach
array.foreach(callback(currentvalue, index, array), this)
//或者
array.foreach(callback(currentvalue, index, array))
//map:
var new_array = arr.map(callback[, thisarg])
//$.each()
$(selector).each(function(index,element)) //注意引數的順序
callback: 為陣列中每個元素執行的函式,該函式接收三個引數,
引數一:當前陣列中元素;引數二:索引; 引數三:當前陣列。
this:可選,執行會掉時候,this的指向。
二、區別
2.1、foreach()返回值是undefined,不可以鏈式呼叫。
2.2、map()返回一個新陣列,原陣列不會改變。
2.3、沒有辦法終止或者跳出foreach()迴圈,除非丟擲異常,所以想執行一個陣列是否滿足什麼條件,返回布林值,可以用一般的for迴圈實現,或者用array.every()或者array.
some();
2.4、$.each()方法規定為每個匹配元素規定執行的函式,可以返回 false 可用於及早停止迴圈。
js中的 map,foreach,reduce 之間有什麼區別麼
4樓:愛孤傲王者
foreach: 對陣列中每一個元素都執行函式,該方法沒有返回值。如果你想對資料裡的每一個元素進行處理,可以採用foreach來替換 for迴圈
map:對陣列中每一個元素都執行函式, 返回由每次函式執行的結果組成的陣列。果你想對資料裡的每一個元素進行處理,可以採用foreach來替換 for迴圈,和foreach不同的是,它最終會返回一個新的陣列,陣列的元素是每次處理先前陣列中元素返回的結果
reduce: 對陣列中的所有元素呼叫指定的**函式。 該**函式的返回值為累積結果,並且此返回值在下一次呼叫該**函式時作為引數提供。
還是看例子來理解吧:
var arr3 = [1,2,9,5,4];
// 陣列中每個元素都要翻10倍
var arr4 = arr3.map(function(ele,index,arr2) );
console.log(arr4.tostring()); //10,20,90,50,40
arr3.foreach(function(ele,index,arr));
列印結果:
模擬插入元素到資料庫:1
模擬插入元素到資料庫:2
模擬插入元素到資料庫:9
模擬插入元素到資料庫:5
模擬插入元素到資料庫:4
reduce的測試例子:
5樓:匿名使用者
假設我們有一個陣列,每個元素是一個人。你面前站了一排人。
foreach 就是你按順序一個一個跟他們做點什麼,具體做什麼,隨便:
people.foreach(function (dude) );
map 就是你手裡拿一個盒子(一個新的陣列),一個一個叫他們把錢包扔進去。結束的時候你獲得了一個新的陣列,裡面是大家的錢包,錢包的順序和人的順序一一對應。
var wallets = people.map(function (dude) );
reduce 就是你拿著錢包,一個一個數過去看裡面有多少錢啊?每檢查一個,你就和前面的總和加一起來。這樣結束的時候你就知道大家總共有多少錢了。
var totalmoney = wallets.reduce(function (countedmoney, wallet) , 0);
6樓:五長暨丹彤
map是迴圈一個陣列然後返回一個值組成新的陣列;
1[1,2,3].map(function(v)); //返回[1,4,9]
foreach只是迴圈陣列,無返回值(相當於for迴圈);
reduce是迴圈一個陣列,然後組合成一個值1[1,2,3].reduce(function(prv,v)); //返回6
前端面試題,map,foreach,for迴圈,三個都能遍歷,啥區別?
7樓:匿名使用者
for遍歷物件自身的和繼承的可列舉的屬性,也就是說會包括那些原型鏈上的屬性。如果想要僅迭代自身的屬性,那麼在使用 for...in
foreach
只能遍歷陣列,不能中斷,沒有返回值(或認為返回值是undefined)
map只能遍歷陣列,不能中斷,返回值是修改後的陣列
8樓:薄荷
雖說都能遍歷,但是呢,效率完全不同了吧。所以,這道題主要問的是演算法方向的問題!
9樓:匿名使用者
這個區別就是她們的遍歷過程不一樣
引入的js和html裡寫的js的區別
慕刓辭 jquery庫在前,自己寫的js在後,然後js檔案最好防盜body結束的後面 這個主要看js載入的時候,js裡面的用到的html元素是否已經載入完了。如果html載入完後,不管js是外部引用還是寫在html裡面的js沒有任何區別。 是el表示式,是jsp才有的和js無關,你可以在頁面定義一個...
js中的substring和substr函式的區別說明
題主既然在這裡問了就說明題主一定網上查過,但是看的不太明白。樓上的兩個回答無非就是從網上什麼地方摘抄一段,很不走心。我給題主來個走心的!保證簡單易懂 不說套話 哈哈。1.ok,先說 substr n,m 意思是 跳過 n 個取 m 個。舉例如下 var s abcdef alert s.substr...
js刪除陣列中的元素delete和splice的區別
珞硃砂 splice刪除後將返回一個新陣列,包含被刪除的元素,delete則返回布林值。splice刪除元素的同時會縮短原陣列長度,delete只是刪除元素,並不會修改陣列長度。splice可以批量刪除多個連續的元素,delete只能逐一刪除。方法一 delete 刪除陣列,delete texta...