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

訪問原文地址javascript

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

筆者說,本身基本沒怎麼用過for()來遍歷,主要是用.forEach()html

可是老是會被不少朋友說,這些人認爲for()的速度要比.forEach()快一點。(其實這根本沒有根據,下面會講)java

速度固然是很重要的,可是咱們也須要從其餘方面考慮一下,特別是代碼資源。編程

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

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

固然,都很重要。首先,這2個方面都不會成爲你代碼中的瓶頸問題。其次,那些小小的優化技巧也不會很好的平衡這2個問題,只會增長你的工做量而已。那我在來看下可讀性、可控性、以及可維護性之間的對比呢。函數式編程

讓咱們先來看個基本的sample函數

好比這個數組測試

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;i<l; i++) {
    console.log(i);
}

70個字母

.map().forEach()明顯要簡短一些,而且他們的可讀性更強,同時他們也建立了各自的scope,而for()在執行完遍歷以後會把il這兩個元素掛起來,這讓咱們須要手動增長一些代碼去清除他們所佔用的內存。

因此,這時候能夠告訴你的朋友:

.forEach()或者.map()

.map() vs .forEach()

那麼接下來,我繼續作分析,爲何更推薦用.map(),而不是.forEach()

首先,.map()要比.forEach()執行速度更快。雖然我也說過執行速度不是咱們須要考慮的主要因素,可是他們都比for()要更好用,那確定要選更優化的一個。

第二,.forEach()的返回值並非array。若是你想用函數式編程寫個鏈式表達式來裝個逼,.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

最後

根據上面的代碼,你們應該瞭解到.forEach().map()的侷限。

最後,感謝你們耐心的閱讀,排個序

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

英文原文

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

相關文章
相關標籤/搜索