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



在我当前的项目中,我可以看到许多几乎相同的_.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

同样由于我们使用 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上使用而不会引发错误(它只返回一个空数组)。根据你如何看待它,你可能会认为这是一件好事或一件坏事,但这与原生.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/下划线函数结合使用,则具有均匀性的好处。

此外,_.map可以在下划线/下划线链中使用。

例:

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>

最新更新