摘要:加粗文字不管是還是在下都不兼容不兼容的情況下在上沒有這兩個方法那么需要我們自己封裝一個都兼容的方法,代碼如下遍歷數組回調函數上下文下自己編寫回調函數執行的邏輯遍歷數組回調函數上下文下自己編寫回調函數執行的邏輯
原理:
高級瀏覽器支持forEach方法
語法:forEach和map都支持2個參數:一個是回調函數(item,index,list)和上下文;
forEach:用來遍歷數組中的每一項;這個方法執行是沒有返回值的,對原來數組也沒有影響;
數組中有幾項,那么傳遞進去的匿名回調函數就需要執行幾次;
每一次執行匿名函數的時候,還給其傳遞了三個參數值:數組中的當前項item,當前項的索引index,原始數組input;
理論上這個方法是沒有返回值的,僅僅是遍歷數組中的每一項,不對原來數組進行修改;但是我們可以自己通過數組的索引來修改原來的數組;
forEach方法中的this是ary,匿名回調函數中的this默認是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);//-->會對原來的數組產生改變;
map:和forEach非常相似,都是用來遍歷數組中的每一項值的,用來遍歷數組中的每一項;
區別:map的回調函數中支持return返回值;return的是啥,相當于把數組中的這一項變為啥(并不影響原來的數組,只是相當于把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);
不管是forEach還是map 都支持第二個參數值,第二個參數的意思是把匿名回調函數中的this進行修改。
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上沒有這兩個方法),那么需要我們自己封裝一個都兼容的方法,代碼如下:
/** * forEach遍歷數組 * @param callback [function] 回調函數; * @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下自己編寫回調函數執行的邏輯 for(var i = 0,len = this.length; i < len;i++) { callback && callback.call(context,this[i],i,this); } }
/** * map遍歷數組 * @param callback [function] 回調函數; * @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下自己編寫回調函數執行的邏輯 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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102466.html
摘要:中一共有五種數組遍歷迭代方法,它們都會對數組中每個元素執行一些業務,且都不會修改原數組,這些方法包括如果該函數任意一項返回,則返回,如果全部返回則最終返回如果該函數每一項都返回,則返回,否則返回會返回一個新數組,該數組是由滿足條件的任意項組 ES5中一共有五種數組遍歷(迭代)方法,它們都會對數組中每個元素執行一些業務,且都不會修改原數組,這些方法包括: 1、some() 如果該函數任意...
摘要:循環方法方法不改變原數組方法會給原數組中的每個元素都按順序調用一次函數。篩選出過濾出數組中符合條件的項組成新數組代碼方法方法為數組中的每個元素執行一次函數,直到它找到一個使返回表示可轉換為布爾值的值的元素。 showImg(https://segmentfault.com/img/bV2QTD?w=1600&h=500); 前言 JavaScript 發展至今已經發展出多種數組的循環遍...
摘要:的的區別和相同之處就是數組的遍歷循環,回調支持三個參數,第個是遍歷的數組內容第個是對應的數組索引,第個是數組本身他是沒有返回值得,不需要再下面,更進一步,除了接受一個必須的回調函數參數,還可以接受一個可選的上下文參數改變回調函數里面 Array的forEach、map的區別和相同之處 forEach 1、 forEach就是數組的遍歷、循環 ,回調支持三個參數,第1個是遍歷的數組內容;...
摘要:遍歷方法小結常用的遍歷方法遍歷對數組的每個元素執行一次提供的函數創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果遍歷大家都熟悉,所以重點講一下與的區別相同點回調函數參數相同,都自帶三個屬性均不會修改原數組第二參數的 遍歷方法小結 常用的遍歷方法 for 遍歷 forEach(對數組的每個元素執行一次提供的函數) map(創建一個新數組,其結果是該數組中的每個...
摘要:比如,構造函數返回的數組都是空位。方法方法方法方法方法方法方法方法對空位的處理則是明確將空位轉為。在這些情況下,迭代器關閉。 原型鏈相關 最詳盡的 JS 原型與原型鏈終極詳解 isNaN() 和 Number.isNaN() 的區別 isNaN() 是 ES1 規范; 是全局方法; 如果參數不是一個 Number 類型,會先嘗試將參數轉化為數值,然后對轉換后的結果進行是否是 Na...
閱讀 728·2021-08-17 10:11
閱讀 1594·2019-08-30 11:15
閱讀 1017·2019-08-26 13:54
閱讀 3502·2019-08-26 11:47
閱讀 1212·2019-08-26 10:20
閱讀 2816·2019-08-23 18:35
閱讀 1213·2019-08-23 17:52
閱讀 1297·2019-08-23 16:19