摘要:加粗文字不管是還是在下都不兼容不兼容的情況下在上沒有這兩個(gè)方法那么需要我們自己封裝一個(gè)都兼容的方法,代碼如下遍歷數(shù)組回調(diào)函數(shù)上下文下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯遍歷數(shù)組回調(diào)函數(shù)上下文下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯
原理:
高級瀏覽器支持forEach方法
語法:forEach和map都支持2個(gè)參數(shù):一個(gè)是回調(diào)函數(shù)(item,index,list)和上下文;
forEach:用來遍歷數(shù)組中的每一項(xiàng);這個(gè)方法執(zhí)行是沒有返回值的,對原來數(shù)組也沒有影響;
數(shù)組中有幾項(xiàng),那么傳遞進(jìn)去的匿名回調(diào)函數(shù)就需要執(zhí)行幾次;
每一次執(zhí)行匿名函數(shù)的時(shí)候,還給其傳遞了三個(gè)參數(shù)值:數(shù)組中的當(dāng)前項(xiàng)item,當(dāng)前項(xiàng)的索引index,原始數(shù)組input;
理論上這個(gè)方法是沒有返回值的,僅僅是遍歷數(shù)組中的每一項(xiàng),不對原來數(shù)組進(jìn)行修改;但是我們可以自己通過數(shù)組的索引來修改原來的數(shù)組;
forEach方法中的this是ary,匿名回調(diào)函數(shù)中的this默認(rèn)是window;
var ary = [12,23,24,42,1]; var res = ary.forEach(function (item,index,input) { input[index] = item*10; }) console.log(res);//-->undefined; console.log(ary);//-->會對原來的數(shù)組產(chǎn)生改變;
map:和forEach非常相似,都是用來遍歷數(shù)組中的每一項(xiàng)值的,用來遍歷數(shù)組中的每一項(xiàng);
區(qū)別:map的回調(diào)函數(shù)中支持return返回值;return的是啥,相當(dāng)于把數(shù)組中的這一項(xiàng)變?yōu)樯叮ú⒉挥绊懺瓉淼臄?shù)組,只是相當(dāng)于把原數(shù)組克隆一份,把克隆的這一份的數(shù)組中的對應(yīng)項(xiàng)改變了);
不管是forEach還是map 都支持第二個(gè)參數(shù)值,第二個(gè)參數(shù)的意思是把匿名回調(diào)函數(shù)中的this進(jìn)行修改。
var ary = [12,23,24,42,1]; var res = ary.map(function (item,index,input) { return item*10; }) console.log(res);//-->[120,230,240,420,10]; console.log(ary);//-->[12,23,24,42,1];
加粗文字
不管是forEach還是map在IE6-8下都不兼容(不兼容的情況下在Array.prototype上沒有這兩個(gè)方法),那么需要我們自己封裝一個(gè)都兼容的方法,代碼如下:
/** * forEach遍歷數(shù)組 * @param callback [function] 回調(diào)函數(shù); * @param context [object] 上下文; */ Array.prototype.myForEach = function myForEach(callback,context){ context = context || window; if("forEach" in Array.prototye) { this.forEach(callback,context); return; } //IE6-8下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯 for(var i = 0,len = this.length; i < len;i++) { callback && callback.call(context,this[i],i,this); } }
/** * map遍歷數(shù)組 * @param callback [function] 回調(diào)函數(shù); * @param context [object] 上下文; */ Array.prototype.myMap = function myMap(callback,context){ context = context || window; if("map" in Array.prototye) { return this.map(callback,context); } //IE6-8下自己編寫回調(diào)函數(shù)執(zhí)行的邏輯 var newAry = []; for(var i = 0,len = this.length; i < len;i++) { if(typeof callback === "function") { var val = callback.call(context,this[i],i,this); newAry[newAry.length] = val; } } return newAry; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102466.html
摘要:中一共有五種數(shù)組遍歷迭代方法,它們都會對數(shù)組中每個(gè)元素執(zhí)行一些業(yè)務(wù),且都不會修改原數(shù)組,這些方法包括如果該函數(shù)任意一項(xiàng)返回,則返回,如果全部返回則最終返回如果該函數(shù)每一項(xiàng)都返回,則返回,否則返回會返回一個(gè)新數(shù)組,該數(shù)組是由滿足條件的任意項(xiàng)組 ES5中一共有五種數(shù)組遍歷(迭代)方法,它們都會對數(shù)組中每個(gè)元素執(zhí)行一些業(yè)務(wù),且都不會修改原數(shù)組,這些方法包括: 1、some() 如果該函數(shù)任意...
摘要:循環(huán)方法方法不改變原數(shù)組方法會給原數(shù)組中的每個(gè)元素都按順序調(diào)用一次函數(shù)。篩選出過濾出數(shù)組中符合條件的項(xiàng)組成新數(shù)組代碼方法方法為數(shù)組中的每個(gè)元素執(zhí)行一次函數(shù),直到它找到一個(gè)使返回表示可轉(zhuǎn)換為布爾值的值的元素。 showImg(https://segmentfault.com/img/bV2QTD?w=1600&h=500); 前言 JavaScript 發(fā)展至今已經(jīng)發(fā)展出多種數(shù)組的循環(huán)遍...
摘要:的的區(qū)別和相同之處就是數(shù)組的遍歷循環(huán),回調(diào)支持三個(gè)參數(shù),第個(gè)是遍歷的數(shù)組內(nèi)容第個(gè)是對應(yīng)的數(shù)組索引,第個(gè)是數(shù)組本身他是沒有返回值得,不需要再下面,更進(jìn)一步,除了接受一個(gè)必須的回調(diào)函數(shù)參數(shù),還可以接受一個(gè)可選的上下文參數(shù)改變回調(diào)函數(shù)里面 Array的forEach、map的區(qū)別和相同之處 forEach 1、 forEach就是數(shù)組的遍歷、循環(huán) ,回調(diào)支持三個(gè)參數(shù),第1個(gè)是遍歷的數(shù)組內(nèi)容;...
摘要:遍歷方法小結(jié)常用的遍歷方法遍歷對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)提供的函數(shù)后返回的結(jié)果遍歷大家都熟悉,所以重點(diǎn)講一下與的區(qū)別相同點(diǎn)回調(diào)函數(shù)參數(shù)相同,都自帶三個(gè)屬性均不會修改原數(shù)組第二參數(shù)的 遍歷方法小結(jié) 常用的遍歷方法 for 遍歷 forEach(對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)) map(創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)...
摘要:比如,構(gòu)造函數(shù)返回的數(shù)組都是空位。方法方法方法方法方法方法方法方法對空位的處理則是明確將空位轉(zhuǎn)為。在這些情況下,迭代器關(guān)閉。 原型鏈相關(guān) 最詳盡的 JS 原型與原型鏈終極詳解 isNaN() 和 Number.isNaN() 的區(qū)別 isNaN() 是 ES1 規(guī)范; 是全局方法; 如果參數(shù)不是一個(gè) Number 類型,會先嘗試將參數(shù)轉(zhuǎn)化為數(shù)值,然后對轉(zhuǎn)換后的結(jié)果進(jìn)行是否是 Na...
閱讀 732·2021-08-17 10:11
閱讀 1599·2019-08-30 11:15
閱讀 1022·2019-08-26 13:54
閱讀 3510·2019-08-26 11:47
閱讀 1221·2019-08-26 10:20
閱讀 2822·2019-08-23 18:35
閱讀 1217·2019-08-23 17:52
閱讀 1300·2019-08-23 16:19