2017-03-17 47 views
1

在我目前的項目中,我可以看到很多_.map()用法幾乎相同,如下面的例子:使用lodash/underscore .map()函數的原因是什麼?

var a = [1,2,3,4,5,6,7,8]; 
var lodashMap = _.map(a, i => { 
    if (i < 5) return i-1; 
}); 

而且我看不出有任何理由不使用時只需內置Array.map()方法是這樣的:

var arrayMap = a.map(i => { 
    if (i < 5) return i-1; 
}); 

我知道沒有這些變異原陣列,並確信其結果是完全一致的:https://codepen.io/anon/pen/xqPMNQ

而且因爲我們使用的是打字稿,lodash版本丟失i參數類型,所以我想用Array.map()代替。我不知道Array.map_.map()之間有什麼區別嗎?

+12

下劃線/ LoDash早Array.prototype.map的'廣泛可用性()'。 – Pointy

+1

舊的瀏覽器不實現'Array.prototype.map',所以lodash是一個pollyfill,可以在近期和舊版瀏覽器上運行! –

+0

因此,我們的項目目標是es5,我可以使用'Array.map',謝謝澄清! –

回答

3

出於您在那裏所舉的例子的目的,這兩個選項之間沒有有效的區別,您也可以使用a.map()

但是,_.mapArray#map之間的一些差異。

一個是它可以直接調用類似數組的對象。 (要與Array#map這樣做需要任一附接功能的對象,然後調用它,或使用笨拙的方法與.call()。)

實施例:

var mapped = _.map(document.getElementsByTagName('li'), el => el.textContent); 
 

 
console.log(mapped);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 
 
<ul><li>A</li><li>B</li><li>C</li></ul>

您也可以在不是類似數組的對象上使用_.map。這是Array#map根本無法做到的事情。

例子:

var myObj = { a: 1, b : 2 }; 
 
var mapped = _.map(myObj, (val, key) => key + val); 
 

 
console.log(mapped);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

除此之外,有均勻的只是利益,如果你也有很多其他lodash /強調功能的結合。另外,_.map可用於下劃線/ lodash鏈式樣式。

實施例:

var values = [{ value: 10 }, { value: 2 }, { value: 13 }, { value: 7 }]; 
 
var result = _.chain(values) 
 
       .map(_.property('value')) 
 
       .filter(v => v > 5) 
 
       .sortBy() 
 
       .value(); 
 
       
 
console.log(result); 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

相關問題