在我当前的项目中,我可以看到许多_.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()
之间是否有任何区别?
答案 0 :(得分:8)
就您所拥有的示例而言,这两个选项之间没有任何有效区别,您也可以使用a.map()
。
但是,{em> <{1}}和_.map
之间存在一些差异。
一个是它可以直接在类似数组的对象上调用。 (使用Array#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);
除此之外,如果您将其与许多其他lodash /下划线功能相结合,那么统一性的好处就在于此。此外,<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);