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

What is the reason to use lodash / underscore .map() function?

在我当前的项目中,我可以看到许多 _.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;
});

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

此外,由于我们使用的是 Typescript,lodash 版本丢失了 i 参数类型,因此我想改用 Array.map()Array.map_.map() 之间有什么我不知道的区别吗?

就您提供的示例而言,这两个选项之间没有明显区别,您也可以使用 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>

它也可以在 null 上使用而不会引发错误(它只是 returns 一个空数组)。根据您的看法,您可能认为这是好事或坏事,但它与原生 .map.

有显着差异

示例:

var myObj = null;
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/underscore 功能结合使用,那么唯一的好处就是统一性。

此外,_.map 可用于 underscore/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>