使用lodash/underscore .map()函数的原因是什么?

Dan*_*cal 3 javascript arrays underscore.js lodash

在我当前的项目中,我可以看到许多_.map()用法几乎相同,如下例所示:

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

而且我看不出有任何理由不使用这样的内置Array.map()方法:

var arrayMap = a.map(i => {
  if (i < 5) return i-1;
});
Run Code Online (Sandbox Code Playgroud)

我知道这些都不会改变原始数组,并确保结果完全相同:https://codepen.io/anon/pen/xqPMNQ

另外,当我们使用Typescript时,lodash版本会丢失i参数类型,所以我想Array.map()改用.有没有我不知道的有什么区别Array.map_.map()

JLR*_*she 9

就你所拥有的例子而言,这两个选项之间没有任何有效的区别,你也可以使用它们a.map().

但是,一些差异_.mapArray#map.

一个是它可以直接在类似数组的对象上调用.(要做到这一点,Array#map需要将函数附加到对象然后调用它,或者使用笨拙的方法.call().)

例:

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

console.log(mapped);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

您还可以使用_.map不像数组的对象.这根本Array#map无法做到.

例:

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

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

除此之外,如果您将其与许多其他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);
  
Run Code Online (Sandbox Code Playgroud)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)