JS forEach和map方法的用法與區(qū)別分析
本文實(shí)例講述了JS forEach和map方法的用法與區(qū)別。分享給大家供大家參考,具體如下:
一、前言
forEach()和map()兩個(gè)方法都是ECMA5中Array引進(jìn)的新方法,主要作用是對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù),但是它們之間還是有區(qū)別的。jQuery也有一個(gè)方法$.each()
,長得和forEach()
有點(diǎn)像,功能也類似。但是從本質(zhì)上還是有很大的區(qū)別的,那么我們探探究竟。
二、forEach和map語法
2.1、語法:
//forEach array.forEach(callback(currentValue, index, array){ //do something }, this) //或者 array.forEach(callback(currentValue, index, array){ //do something }) //map: var new_array = arr.map(callback[, thisArg]) //$.each() $(selector).each(function(index,element)) //注意參數(shù)的順序
callback: 為數(shù)組中每個(gè)元素執(zhí)行的函數(shù),該函數(shù)接收三個(gè)參數(shù),
參數(shù)一:當(dāng)前數(shù)組中元素;參數(shù)二:索引; 參數(shù)三:當(dāng)前數(shù)組。
this:可選,執(zhí)行會(huì)掉時(shí)候,this的指向。
2.2、區(qū)別
2.2.1、forEach()
返回值是undefined,不可以鏈?zhǔn)秸{(diào)用。
2.2.2、map()
返回一個(gè)新數(shù)組,原數(shù)組不會(huì)改變。
2.2.3、沒有辦法終止或者跳出forEach()
循環(huán),除非拋出異常,所以想執(zhí)行一個(gè)數(shù)組是否滿足什么條件,返回布爾值,可以用一般的for循環(huán)實(shí)現(xiàn),或者用Array.every()
或者Array.some()
;
2.2.4、$.each()
方法規(guī)定為每個(gè)匹配元素規(guī)定運(yùn)行的函數(shù),可以返回 false 可用于及早停止循環(huán)。
三、一些栗子
3.1 迭代時(shí)的修改
在使用forEach()
時(shí)候,如果數(shù)組在迭代的時(shí)候被修改,則其他元素會(huì)被跳過。因?yàn)?forEach()
不會(huì)在迭代之前創(chuàng)建數(shù)組的副本。
var words = ['one', 'two', 'three', 'four']; words.forEach(function(word) { console.log(word); if (word === 'two') { words.shift(); } }); // one // two // four
3.2反轉(zhuǎn)字符串
var str = '12345'; Array.prototype.map.call(str, function(x) { //同時(shí)利用了call()方法 return x; }).reverse().join('');
3.3一個(gè)筆試題。
["1", "2", "3"].map(parseInt); //結(jié)果 [1, NaN, NaN]
如果想得到[1, 2,3]應(yīng)該這么做
function returnInt(element){ return parseInt(element,10); } ["1", "2", "3"].map(returnInt);
這主要是因?yàn)?code>parseInt()默認(rèn)有兩個(gè)參數(shù),第二個(gè)參數(shù)是進(jìn)制數(shù)。當(dāng)parsrInt沒有傳入?yún)?shù)的時(shí)候,而map()
中的回調(diào)函數(shù)時(shí)候,會(huì)給它傳三個(gè)參數(shù),第二個(gè)參數(shù)就是索引,明顯不正確,所以返回NaN了。
四、兼容性
forEach()
和map()
是ECMA5新引入的,可能在標(biāo)準(zhǔn)的其他實(shí)現(xiàn)中不存在,在使用前可以要Ployfill一下。
具體網(wǎng)上很多吧,更多的是在ie9以下,如果你的項(xiàng)目無視這些,那么你可以不care。
參考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。
PS:這里再為大家推薦一款JS數(shù)組遍歷方式分析對比工具供大家參考:
在線JS常見遍歷方式性能分析比較工具:http://tools.jb51.net/aideddesign/js_bianli
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《javascript面向?qū)ο笕腴T教程》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
- JS中Map和ForEach的區(qū)別
- JavaScript中的數(shù)組遍歷forEach()與map()方法以及兼容寫法介紹
- js遍歷詳解(forEach, map, for, for...in, for...of)
- 原生JS forEach()和map()遍歷的區(qū)別、兼容寫法及jQuery $.each、$.map遍歷操作
- JS中forEach()和map()的區(qū)別講解
- 簡述JS中forEach()、map()、every()、some()和filter()的用法
- JS數(shù)組遍歷中for,for in,for of,map,forEach各自的使用方法與優(yōu)缺點(diǎn)
- JS中的常見數(shù)組遍歷案例詳解(forEach,?map,?filter,?sort,?reduce,?every)
- JS中forEach、for、map的區(qū)別示例詳解
相關(guān)文章
JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法分析
這篇文章主要介紹了JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法,結(jié)合實(shí)例形式分析了使用indexOf()方法進(jìn)行數(shù)組的判斷與去重相關(guān)原理與具體操作技巧,需要的朋友可以參考下2018-09-09js中調(diào)用微信的掃描二維碼功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了在js中調(diào)用微信的掃描二維碼功能的實(shí)現(xiàn)代碼,本文給大家分享了注意事項(xiàng)及常見問題分析,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04基于input框覆蓋掉數(shù)字英文的實(shí)例講解
下面小編就為大家?guī)硪黄趇nput框覆蓋掉數(shù)字英文的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07?JavaScript+HarmonyOS?實(shí)現(xiàn)一個(gè)手繪板
這篇文章主要介紹了?JavaScript+HarmonyOS?實(shí)現(xiàn)一個(gè)手繪板,利用openHarmony內(nèi)置的API?cnavas組件實(shí)現(xiàn),具體詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-07-07javascript中Date format(js日期格式化)方法小結(jié)
這篇文章主要介紹了javascript中Date format,即js日期格式化的方法.實(shí)例總結(jié)了三種常見的JavaScript日期格式化技巧,需要的朋友可以參考下2015-12-12js實(shí)現(xiàn)a標(biāo)簽超鏈接提交form表單的方法
這篇文章主要介紹了js實(shí)現(xiàn)a標(biāo)簽超鏈接提交form表單的方法,涉及javascript針對表單操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06asp.net+js 實(shí)現(xiàn)無刷新上傳解析csv文件的代碼
無刷新上傳解析csv文件的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-05-05