js 數組方法 map 與 forEach 的比較

日期:2020 年 8 月 13 日

map 與 forEach 的比較

基本定義及使用

定義

map
map() 方法創(chuàng)建一個新數組封孙,其結果是該數組中的每個元素是調用一次提供的函數后的返回值

forEach
forEach() 方法對數組的每個元素執(zhí)行一次給定的函數

語法
// map 用法
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array 
}[, thisArg])
// forEach 用法
arr.forEach(callback(currentValue [, index [, array]])[, thisArg])

異同對比

相同點

都是用來遍歷一個數組并對數組的每一項執(zhí)行給定的函數

不同點
  1. 從它們各自的定義中即可發(fā)現數組調用 map 方法之后會返回一個新的數組,而數組調用 forEach 之后是沒有返回值讽营,即一定返回 undefined

注意:map 返回的新數組的各項就是原數組每一項調用 callback 之后的返回值虎忌,所以這也要求 map 中的 callback 一定要有返回值,同時橱鹏,map 會返回一個新數組也決定了 map 之后可以繼續(xù)進行鏈式操作膜蠢,而 forEach 因為沒有返回值堪藐,所以后面就不能再接其他操作了

  1. 它們的使用場景不同,map 適用于需要更改數組的場景挑围,而 forEach 更適用于打印數組內容礁竞,并且 forEach 除了拋出異常以外,沒有辦法中止或跳出循環(huán)贪惹,若要提前結束循環(huán)苏章,則可以使用 for 循環(huán)、for···of奏瞬、for···in枫绅、every、some硼端、find并淋、findIndex,對于需要判斷一個數組是否滿足條件并返回 true 或 false 的場景可以用 every() 或者 some()珍昨,具體使用場景查看 MDN-forEach

常見誤區(qū)

另外县耽,對于網上的一些說 map 不修改原數組,返回新數組镣典,而 forEach 會修改原數組的說法兔毙,在下也實在不敢茍同。實際上兄春,這兩個方法都不會修改原數組澎剥,但是當數組的元素為一個引用類型的元素時,如果我們對其進行了修改赶舆,那么原數組是會改變的哑姚,看兩個例子:
當操作的數組元素為基本數據類型時:


修改基礎類型數組元素

當操作的數組元素為引用類型時:


修改引用類型數組元素

這是因為 map 和 forEach 的 callback 在操作數組元素時實際上是下面這樣操作的:callback.call([thisArg], this[index], index, this),當數組元素為引用類型時芜茵, this[index] 取到的實際只是一個指向對應元素的地址叙量,這種情況下再進行修改操作,修改的是堆中的對象的內容九串,那當我們再次去讀取原數組中內容時绞佩,讀到這個引用類型的元素時,我們拿到的還是那個地址蒸辆,不過它指向的堆中的內容卻已經變了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末躬贡,一起剝皮案震驚了整個濱河市谆奥,隨后出現的幾起案子酸些,更是在濱河造成了極大的恐慌,老刑警劉巖魄懂,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異缀拭,居然都是意外死亡,警方通過查閱死者的電腦和手機蛛淋,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門褐荷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叛甫,你說我怎么就攤上這事杨伙∠尴唬” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哲身。 經常有香客問我贸伐,道長捉邢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮藐翎,結果婚禮上实幕,老公的妹妹穿的比我還像新娘昆庇。我一直安慰自己,他們只是感情好整吆,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布辉川。 她就那樣靜靜地躺著,像睡著了一般勇哗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欲诺,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天渺鹦,我揣著相機與錄音,去河邊找鬼塞颁。 笑死,一個胖子當著我的面吹牛祠锣,可吹牛的內容都是我干的。 我是一名探鬼主播伴网,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼澡腾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了动分?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤澜公,失蹤者是張志新(化名)和其女友劉穎纠脾,沒想到半個月后蜕青,有當地人在樹林里發(fā)現了一具尸體糊渊,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡渺绒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了躏鱼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡染苛,死狀恐怖主到,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情登钥,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布看锉,位于F島的核電站,受9級特大地震影響伯铣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜懂傀,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一蜡感、第九天 我趴在偏房一處隱蔽的房頂上張望郑兴。 院中可真熱鬧,春花似錦情连、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挽拔。三九已至,卻和暖如春螃诅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背术裸。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搀崭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓瘤睹,卻偏偏與公主長得像袍镀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苇羡,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345