JavaScript中forEach和map的使用場景
foeEach
JavaScript中的forEach方法是一種迭代器,用于遍歷數(shù)組中的每個元素并執(zhí)行指定的操作。
它具有以下特點:
- forEach方法不會改變原數(shù)組,相比于使用循環(huán)遍歷數(shù)組修改值,forEach能夠保持數(shù)組原有結(jié)構(gòu)的完整性。
- forEach方法接受一個回調(diào)函數(shù)作為參數(shù),對于每個數(shù)組元素執(zhí)行一次回調(diào)函數(shù),并將當前處理元素的值、索引、原數(shù)組傳入回調(diào)函數(shù)中。
- forEach方法是同步執(zhí)行的,不能使用異步操作。
- forEach方法無法中途跳出循環(huán),可以使用return關(guān)鍵字結(jié)束單次循環(huán)。
- forEach方法無法中途跳出循環(huán),除非拋出異常。
總之,forEach是一種非常方便的遍歷數(shù)組的方法,可以快速地處理數(shù)組中的每個元素。
forEach方法是同步執(zhí)行的,不能使用異步操作。
在 forEach 的循環(huán)當中,不能使用 await 之類的方式實現(xiàn)異步
forEach方法無法中途跳出循環(huán),可以使用return關(guān)鍵字結(jié)束單次循環(huán)或者拋出異常結(jié)束下面所有邏輯
注意return只能結(jié)束單詞的循環(huán)而不是整個,結(jié)束整個循環(huán)需要拋出異常,所以forEach一般不能用于循環(huán)熔斷
下面是return跳過單次循環(huán)以及拋出異常結(jié)束接下去所有邏輯,
map
在JavaScript中,map方法是一種常用的迭代器,用于將一個數(shù)組中的所有元素應用某個函數(shù)后得到一個新的數(shù)組。 map方法具有以下特點:
map方法不會改變原數(shù)組,而是根據(jù)原數(shù)組中的每個元素調(diào)用一個函數(shù)后得到一個新的數(shù)組作為返回值。map方法接受一個回調(diào)函數(shù)作為參數(shù),該函數(shù)接受三個參數(shù),分別是當前元素的值、索引和原數(shù)組。map方法的返回值是一個新數(shù)組,由原數(shù)組中的所有元素依次調(diào)用回調(diào)函數(shù)后返回的結(jié)果組成。map方法不會對空元素進行調(diào)用回調(diào)函數(shù)。map方法不會遍歷已經(jīng)添加并且未被刪除的元素。
總之,map方法是一種非常方便的迭代器方法,可以用于將一個數(shù)組中的所有元素應用某個函數(shù)后生成一個新數(shù)組,而不必修改原數(shù)組或手動循環(huán)遍歷。
map方法不會遍歷已經(jīng)添加并且未被刪除的元素。
當我們在循環(huán)遍歷一個數(shù)組時,我們有時會向數(shù)組中添加新元素或從數(shù)組中刪除元素。如果我們使用常規(guī)的for循環(huán)來循環(huán)遍歷數(shù)組,那么它們會遍歷所有數(shù)組元素,包括那些是在循環(huán)過程中添加或刪除的元素。
但是,在使用map方法時,它會在迭代過程中忽略掉那些在遍歷開始時已經(jīng)存在的,但在迭代過程中被添加的元素。
并且值得一提的事,forEach方法也是如此,例如:
因此,當我們使用map方法和forEach方法時,要注意它只會遍歷在開始時存在的元素,而不會遍歷后來添加的元素。
什么是迭代器模式
迭代器模式(Iterator Pattern)是一種設計模式,它提供一種遍歷集合或序列的方法,而不暴露其內(nèi)部表示。這個模式屬于行為型模式,可以很好地解決遍歷數(shù)據(jù)結(jié)構(gòu)的問題。
forEach
和 map
方法是應用了迭代器模式的典型例子
JavaScript 的 forEach 和 map方法是應用了迭代器模式的典型例子
迭代器模式定義了一種順序訪問聚合對象中各個元素的方法,而又不需要暴露該聚合對象的內(nèi)部表示。在 JavaScript 中,數(shù)組就是一個聚合對象。forEach
和 map
方法則是應用了迭代器模式,提供了一種便捷的途徑來遍歷數(shù)組中的元素,而不需要直接暴露數(shù)組的內(nèi)部表示。
在迭代器模式中,聚合對象需要實現(xiàn)一個迭代器接口,該接口中包括了一個 next
方法,在調(diào)用該方法時可以返回聚合對象中的下一個元素。在 JavaScript 中,forEach
和 map
方法提供了類似的功能:
forEach
方法接受一個回調(diào)函數(shù),用于遍歷數(shù)組中的每個元素。在每次執(zhí)行回調(diào)函數(shù)時,都會傳遞當前遍歷到的元素、該元素在數(shù)組中的索引以及完整的數(shù)組對象作為參數(shù)。調(diào)用回調(diào)函數(shù)的次數(shù)等于數(shù)組元素的個數(shù)。在遍歷數(shù)組中的每個元素時,forEach
方法會依次調(diào)用回調(diào)函數(shù),并將當前遍歷到的元素和參數(shù)傳遞給它??梢酝ㄟ^該方法來處理每個元素。
map
方法也接受一個回調(diào)函數(shù),但與 forEach
方法不同的是,map
方法會將回調(diào)函數(shù)的返回值作為一個新數(shù)組返回。在調(diào)用回調(diào)函數(shù)時,也會傳遞當前遍歷到的元素、該元素在數(shù)組中的索引以及完整的數(shù)組對象作為參數(shù)。調(diào)用回調(diào)函數(shù)的次數(shù)等于數(shù)組元素的個數(shù)。在遍歷數(shù)組中的每個元素時,map
方法會依次調(diào)用回調(diào)函數(shù),并將當前遍歷到的元素和參數(shù)傳遞給它??梢酝ㄟ^該方法來處理每個元素,并返回一個新數(shù)組。
通過這種方式,我們可以在不暴露數(shù)組內(nèi)部結(jié)構(gòu)的情況下,對數(shù)組中的元素進行遍歷和處理。這正是迭代器模式的核心思想。
到此這篇關(guān)于JavaScript中forEach和map的使用場景的文章就介紹到這了,更多相關(guān)JavaScript forEach和map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Enter轉(zhuǎn)換為Tab的小例子(兼容IE,Firefox)
這篇文章介紹了Enter轉(zhuǎn)換為Tab的小例子(兼容IE,Firefox),有需要的朋友可以參考一下2013-11-11深入理解javascript嚴格模式(Strict Mode)
Strict mode是JavaScript1.8.5引進的技術(shù),但還沒有瀏覽器確實可靠的實現(xiàn)了嚴格模式,所以使用時要小心并且多測試。Strict mode可以應用于整個腳本,也可以適合于單個函數(shù)。2014-11-11javascript 根據(jù)指定字符把字符串拆分為數(shù)組
javascript 根據(jù)指定字符把字符串拆分為數(shù)組2009-05-05AJAX使用了UpdatePanel后無法使用alert彈出腳本
今天在做項目的時候發(fā)現(xiàn)個問題。。使用UpdatePanel后alert腳本就要報錯了。2010-04-04