JS的forEach和map方法的區別,還有each

時間 2022-02-10 02:15:03

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...