成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

.map() vs .forEach() vs for() 如何選擇?

iliyaku / 517人閱讀

摘要:但是總是會被很多朋友說,這些人認(rèn)為的速度要比快一點(diǎn)。如果你想用函數(shù)式編程寫個(gè)鏈?zhǔn)奖磉_(dá)式來裝個(gè)逼,將會是你不二的選擇。來看下面這個(gè)例子鏈?zhǔn)斤L(fēng)格接不起來,斷了最后根據(jù)上面的代碼,大家應(yīng)該了解到跟的局限。

訪問原文地址

.map() vs .forEach() vs for()

筆者說,自己基本沒怎么用過for()來遍歷,主要是用.forEach()。

但是總是會被很多朋友說,這些人認(rèn)為for()的速度要比.forEach()快一點(diǎn)。(其實(shí)這根本沒有根據(jù),下面會講)

速度當(dāng)然是很重要的,但是我們也需要從其他方面考慮一下,特別是代碼資源。

這里有一篇很棒的文章,很好的分析了for()遍歷。它同時(shí)也針對for()遍歷和.forEach()做了比對[測試](https://jsperf.com/for-vs-foreach/37)。for().forEach()`相比會消耗更多的內(nèi)存。

這樣,又回到了老問題,是用空間換速度,還是反之?

當(dāng)然,都很重要。首先,這2個(gè)方面都不會成為你代碼中的瓶頸問題。其次,那些小小的優(yōu)化技巧也不會很好的平衡這2個(gè)問題,只會增加你的工作量而已。那我在來看下可讀性、可控性、以及可維護(hù)性之間的對比呢。

讓我們先來看個(gè)基本的sample

比如這個(gè)數(shù)組

var arr = [1, 2, 3];

.map():

arr.map(fcuntion(i) {
    console.log(i);
})

43個(gè)字母

.forEach():

arr.forEach(function(i){
    console.log(i)
})

47個(gè)字母

for()

for(var i=0,l=arr.lengrh;i

70個(gè)字母

.map().forEach()明顯要簡短一些,并且他們的可讀性更強(qiáng),同時(shí)他們也創(chuàng)建了各自的scope,而for()在執(zhí)行完遍歷之后會把il這兩個(gè)元素掛起來,這讓我們需要手動(dòng)增加一些代碼去清除他們所占用的內(nèi)存。

所以,這時(shí)候可以告訴你的朋友:

.forEach()或者.map()

.map() vs .forEach()

那么接下來,我繼續(xù)做分析,為什么更推薦用.map(),而不是.forEach()?

首先,.map()要比.forEach()執(zhí)行速度更快。雖然我也說過執(zhí)行速度不是我們需要考慮的主要因素,但是他們都比for()要更好用,那肯定要選更優(yōu)化的一個(gè)。

第二,.forEach()的返回值并不是array。如果你想用函數(shù)式編程寫個(gè)鏈?zhǔn)奖磉_(dá)式來裝個(gè)逼,.map()將會是你不二的選擇。

來看下面這個(gè)例子:

var arr = [1, 2, 3];

console.log(
    arr.map(function(i){
        return i+i;
    })
    //鏈?zhǔn)斤L(fēng)格
    .sort()
);// [2,4,6]

console.log(
    arr.forEach(function(i){
        return i+i;
    })
    //接不起來,斷了
    .sort()
);//TypeError: Cannot read property "sort" of undefined
最后

根據(jù)上面的代碼,大家應(yīng)該了解到.forEach().map()的局限。

最后,感謝大家耐心的閱讀,排個(gè)序

.map() > .forEach() > for()

英文原文

https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91156.html

相關(guān)文章

  • for...in VS. for...of

    摘要:在種和一樣都具有遍歷數(shù)組的功能,但是他們的返回結(jié)果并不相同,使用遍歷數(shù)組時(shí),無法使用中斷循環(huán),也無法使用中斷,當(dāng)然使用也不能返回到外層函數(shù)。枚舉對象循環(huán)不支持普通對象,如果想迭代一個(gè)對象的屬性,可以使用內(nèi)建的方法使用方法獲取對象的數(shù)組 先看下面這兩種寫法:1. tabList.forEach((tab, i) => { if (tab.is_main) { th...

    Anchorer 評論0 收藏0
  • JavaScript中MapForEach的區(qū)別

    摘要:示例下方提供了一個(gè)數(shù)組,如果我們想將其中的每一個(gè)元素翻倍,我們可以使用和來達(dá)到目的。注意,是不會返回有意義的值的。允許更改原始數(shù)組的元素。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,得到了金山軟件等眾多知名用戶的認(rèn)可。 譯者按: 慣用Haskell的我更愛map。 原文: JavaScript?—?Map vs. ForEach - What’s the difference bet...

    charles_paul 評論0 收藏0
  • Java 8 vs. Scala(二):Stream vs. Collection

    摘要:比如對一個(gè)數(shù)據(jù)流進(jìn)行過濾映射以及求和運(yùn)算,通過使用延后機(jī)制,那么所有操作只要遍歷一次,從而減少中間調(diào)用。這里需知道中的元素都是延遲計(jì)算的,正因?yàn)榇耍軌蛴?jì)算無限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達(dá)式對比。在本文,將進(jìn)行 Hussachai Puripunpinyo Java 和 Scala 對比三部曲的第二部分,主要關(guān)注 Stream...

    GeekGhc 評論0 收藏0
  • js--遍歷數(shù)組和對象方法及其效率--for-forof--foreach--forin

    摘要:數(shù)組優(yōu)化版優(yōu)化版谷歌版本正式版本位優(yōu)化版火狐版本優(yōu)化版結(jié)論這是一個(gè)尷尬的結(jié)論,谷歌火狐,同樣是最新版本或許谷歌才是王道,火狐跳舞吧,顫抖吧,你也太慢了吧,以谷歌為準(zhǔn)相對來說作為新的遍歷方法具有可觀的效率對象 數(shù)組 var arr = new Array(10000000); var arr1 = []; var arr2 = []; var arr3 =...

    ThinkSNS 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<