摘要:但是總是會被很多朋友說,這些人認為的速度要比快一點。如果你想用函數(shù)式編程寫個鏈式表達式來裝個逼,將會是你不二的選擇。來看下面這個例子鏈式風格接不起來,斷了最后根據(jù)上面的代碼,大家應該了解到跟的局限。
訪問原文地址
.map() vs .forEach() vs for()筆者說,自己基本沒怎么用過for()來遍歷,主要是用.forEach()。
但是總是會被很多朋友說,這些人認為for()的速度要比.forEach()快一點。(其實這根本沒有根據(jù),下面會講)
速度當然是很重要的,但是我們也需要從其他方面考慮一下,特別是代碼資源。
這里有一篇很棒的文章,很好的分析了for()遍歷。它同時也針對for()遍歷和.forEach()做了比對[測試](https://jsperf.com/for-vs-foreach/37)。for()與.forEach()`相比會消耗更多的內存。
這樣,又回到了老問題,是用空間換速度,還是反之?
當然,都很重要。首先,這2個方面都不會成為你代碼中的瓶頸問題。其次,那些小小的優(yōu)化技巧也不會很好的平衡這2個問題,只會增加你的工作量而已。那我在來看下可讀性、可控性、以及可維護性之間的對比呢。
讓我們先來看個基本的sample
比如這個數(shù)組
var arr = [1, 2, 3];
.map():
arr.map(fcuntion(i) { console.log(i); })
43個字母
.forEach():
arr.forEach(function(i){ console.log(i) })
47個字母
for()
for(var i=0,l=arr.lengrh;i70個字母
.map()和.forEach()明顯要簡短一些,并且他們的可讀性更強,同時他們也創(chuàng)建了各自的scope,而for()在執(zhí)行完遍歷之后會把i和l這兩個元素掛起來,這讓我們需要手動增加一些代碼去清除他們所占用的內存。
所以,這時候可以告訴你的朋友:
用.forEach()或者.map()。
.map() vs .forEach()那么接下來,我繼續(xù)做分析,為什么更推薦用.map(),而不是.forEach()?
首先,.map()要比.forEach()執(zhí)行速度更快。雖然我也說過執(zhí)行速度不是我們需要考慮的主要因素,但是他們都比for()要更好用,那肯定要選更優(yōu)化的一個。
第二,.forEach()的返回值并不是array。如果你想用函數(shù)式編程寫個鏈式表達式來裝個逼,.map()將會是你不二的選擇。
來看下面這個例子:
var arr = [1, 2, 3]; console.log( arr.map(function(i){ return i+i; }) //鏈式風格 .sort() );// [2,4,6] console.log( arr.forEach(function(i){ return i+i; }) //接不起來,斷了 .sort() );//TypeError: Cannot read property "sort" of undefined最后根據(jù)上面的代碼,大家應該了解到.forEach()跟.map()的局限。
最后,感謝大家耐心的閱讀,排個序
.map() > .forEach() > for()
英文原文https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91156.html
摘要:在種和一樣都具有遍歷數(shù)組的功能,但是他們的返回結果并不相同,使用遍歷數(shù)組時,無法使用中斷循環(huán),也無法使用中斷,當然使用也不能返回到外層函數(shù)。枚舉對象循環(huán)不支持普通對象,如果想迭代一個對象的屬性,可以使用內建的方法使用方法獲取對象的數(shù)組 先看下面這兩種寫法:1. tabList.forEach((tab, i) => { if (tab.is_main) { th...
摘要:示例下方提供了一個數(shù)組,如果我們想將其中的每一個元素翻倍,我們可以使用和來達到目的。注意,是不會返回有意義的值的。允許更改原始數(shù)組的元素。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認可。 譯者按: 慣用Haskell的我更愛map。 原文: JavaScript?—?Map vs. ForEach - What’s the difference bet...
摘要:比如對一個數(shù)據(jù)流進行過濾映射以及求和運算,通過使用延后機制,那么所有操作只要遍歷一次,從而減少中間調用。這里需知道中的元素都是延遲計算的,正因為此,能夠計算無限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達式對比。在本文,將進行 Hussachai Puripunpinyo Java 和 Scala 對比三部曲的第二部分,主要關注 Stream...
摘要:數(shù)組優(yōu)化版優(yōu)化版谷歌版本正式版本位優(yōu)化版火狐版本優(yōu)化版結論這是一個尷尬的結論,谷歌火狐,同樣是最新版本或許谷歌才是王道,火狐跳舞吧,顫抖吧,你也太慢了吧,以谷歌為準相對來說作為新的遍歷方法具有可觀的效率對象 數(shù)組 var arr = new Array(10000000); var arr1 = []; var arr2 = []; var arr3 =...
閱讀 1697·2021-10-09 09:44
閱讀 3263·2021-09-27 13:36
閱讀 1520·2021-09-22 15:33
閱讀 1274·2021-09-22 15:23
閱讀 1159·2021-09-06 15:02
閱讀 1695·2019-08-29 16:14
閱讀 2901·2019-08-29 15:26
閱讀 2408·2019-08-28 18:08