最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS forEach和map方法的用法與區(qū)別分析

 更新時間:2019年02月27日 11:17:47   作者:leaf+  
這篇文章主要介紹了JS forEach和map方法的用法與區(qū)別,結(jié)合實(shí)例形式分析了forEach和map方法的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了JS forEach和map方法的用法與區(qū)別。分享給大家供大家參考,具體如下:

一、前言

forEach()和map()兩個方法都是ECMA5中Array引進(jìn)的新方法,主要作用是對數(shù)組的每個元素執(zhí)行一次提供的函數(shù),但是它們之間還是有區(qū)別的。jQuery也有一個方法$.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ù)組中每個元素執(zhí)行的函數(shù),該函數(shù)接收三個參數(shù),

參數(shù)一:當(dāng)前數(shù)組中元素;參數(shù)二:索引; 參數(shù)三:當(dāng)前數(shù)組。

this:可選,執(zhí)行會掉時候,this的指向。

2.2、區(qū)別

2.2.1、forEach()返回值是undefined,不可以鏈?zhǔn)秸{(diào)用。

2.2.2、map()返回一個新數(shù)組,原數(shù)組不會改變。

2.2.3、沒有辦法終止或者跳出forEach()循環(huán),除非拋出異常,所以想執(zhí)行一個數(shù)組是否滿足什么條件,返回布爾值,可以用一般的for循環(huán)實(shí)現(xiàn),或者用Array.every()或者Array.some();

2.2.4、$.each()方法規(guī)定為每個匹配元素規(guī)定運(yùn)行的函數(shù),可以返回 false 可用于及早停止循環(huán)。

三、一些栗子

3.1 迭代時的修改

在使用forEach()時候,如果數(shù)組在迭代的時候被修改,則其他元素會被跳過。因?yàn)?forEach()不會在迭代之前創(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) {  //同時利用了call()方法
 return x;
}).reverse().join('');

3.3一個筆試題。

["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)有兩個參數(shù),第二個參數(shù)是進(jìn)制數(shù)。當(dāng)parsrInt沒有傳入?yún)?shù)的時候,而map()中的回調(diào)函數(shù)時候,會給它傳三個參數(shù),第二個參數(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錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

最新評論

宜阳县| 牙克石市| 融水| 绥阳县| 南平市| 竹溪县| 台东市| 太白县| 揭西县| 布尔津县| 巴塘县| 金昌市| 华亭县| 开化县| 吴忠市| 错那县| 花垣县| 龙州县| 河源市| 余江县| 郯城县| 平武县| 潜江市| 高阳县| 延边| 东乡县| 昆山市| 剑阁县| 康平县| 民县| 丹棱县| 汶川县| 乌什县| 徐州市| 上思县| 肥乡县| 额尔古纳市| 新宁县| 保亭| 博罗县| 阳信县|