为什么有人更喜欢Lodash或Undercore.js实用程序库而不是另一个?
Lodash似乎是下划线的替代品,后者已经存在了更长的时间。
我认为两者都很出色,但我对它们的工作原理了解不足,无法进行有意义的比较,我想了解更多的差异。
为什么有人更喜欢Lodash或Undercore.js实用程序库而不是另一个?
Lodash似乎是下划线的替代品,后者已经存在了更长的时间。
我认为两者都很出色,但我对它们的工作原理了解不足,无法进行有意义的比较,我想了解更多的差异。
当前回答
除了约翰的回答,阅读Lodash(我之前一直认为Lodash是Undercore.js的“我也是”),查看性能测试、阅读源代码和博客文章之外,还有以下几点使Lodash远优于Undercore.jss:
这不是关于速度,而是关于速度的一致性(?)
如果您查看Undercore.js的源代码,您将在前几行中看到Undercore.jss依赖于许多函数的本地实现。尽管在理想的情况下,这会是一种更好的方法,但如果您查看这些幻灯片中提供的一些性能链接,就不难得出结论,即这些“本地实现”的质量因浏览器而异。Firefox在某些功能上非常快,在某些Chrome中占据主导地位。(我想在某些情况下,Internet Explorer也会占据主导地位)。我认为,最好选择性能在浏览器之间更一致的代码。
一定要早一点阅读博客文章,不要为了它而相信它,而是通过运行基准来自己判断。我现在很震惊,看到Lodash在Chrome中的Array.every等简单的原生函数中比Undercore.js快100-150%!
Lodash中的临时演员也很有用。至于Xanax的一条备受好评的评论,建议对Undercore.js的代码做出贡献:拥有良好的竞争总是更好的,这不仅能保持创新,还能让你保持自己(或你的库)的良好状态。
这里列出了Lodash之间的差异,它的Undercore.js构建是Undercore.jss项目的替代品。
其他回答
如果像我一样,您期望Undercore.js和Lodash之间的使用差异列表,那么有一个从Undercore.jss迁移到Lodash的指南。
以下是留给子孙后代的现状:
下面的任何一个都是LodashUndercore _.all是Lodash _.every下划线_.compose是Lodash _.flowRightUndercore _.contains是Lodash _.includesundercore_.each不允许通过返回false退出Undercore_.findLodash在哪里_.find默认情况下,Undercore _.flatten为深,而Lodash为浅Undercore_.groupBy支持传递参数(value、index、originalArray)的iterate,而在Lodash中,_.groupBy的iteratee只传递了一个参数:(value)。未定义第三个参数的Undercore.js_.indexOf是Lodash _.indexOf具有第三个参数true的Undercore.js_.indexOf是Lodash _.sortedIndexOfUndercore_.indexBy是Lodash _.keyBy调用的核心是Lodash_.invokeMapUndercore_.mapObject是Lodash _.mapValuesUndercore_.max组合Lodash _.max和_.maxByUndercore_.min组合Lodash _.min和_.minByUndercore_.sample组合Lodash _.sample&_.sampleSizeUndercore_.object组合了Lodash _.fromPairs和_.zip对象谓词下面的省略是Lodash省略下划线_.pairs是Lodash _.to pairs谓词下面的pickBy是Lodash_.pickBy下面是Lodash地图Undercore_.sortedIndex组合了Lodash _.sorted索引和_.sorttedIndexOf迭代者的下划线_.uniq是Lodash _.uniqByUndercore _.哪里是Lodash _.filterUndercore_.isFinite与Number.isFinite不对齐(例如_.isFinite('1')在Undercore.js中返回true,但在Lodash中返回false)Undercore_.matches速记不支持深度比较(例如,_.filter(对象,{“a”:{“b”:“c”}}))下划线≥1.7&Lodash _.template语法为_.templ(字符串,选项)(数据)内存缓存是类似于地图的对象Lodash不支持许多支持_.bind的方法的上下文参数Lodash支持隐式链接、惰性链接和快捷方式融合Lodash将其过载的_头、_尾、_尾和_首字母拆分为_take,take对,drop,和drop对(即Undercore.js中的_.head(array,2)是Lodash中的_.take(array))
本·麦考密克(Ben McCormick)的《Undercore vs Lo Dash》(Undercore vs Lo Dash)是最新一篇将两者进行比较的文章:
Lodash的API是Undercore.js的超集。
在幕后,洛达什被彻底改写了。
Lodash绝对不会比Undercore.js慢。
Lodash补充了什么?
可用性改进额外功能性能提升链接的速记语法自定义生成以仅使用所需内容语义版本控制和100%代码覆盖率
Undercore.js大部分是Lodash的子集。
有时,就像现在一样,Undercore.js会有Lodash没有的一些很酷的小功能,比如mapObject。这一次为我的项目开发节省了大量时间。
我不确定OP是不是这个意思,但我遇到了这个问题,因为我在搜索从Undercore.js迁移到Lodash时必须记住的问题列表。
如果有人发表一篇文章,列出这些差异的完整列表,我将非常感激。让我从我用艰难的方式学到的东西开始(也就是说,那些让我的代码在生产中爆炸的东西:/):
_默认情况下,Undercore.js中的.sflat为deep,必须将true作为第二个参数传递,使其变浅。在Lodash中,默认情况下它是浅的,将true作为第二个参数传递将使其变深!:)_Underscore.js中的.last接受第二个参数,该参数告诉您需要多少元素。在Lodash,没有这样的选择。您可以使用.sslice来模拟这一点_.第一期(同一期)_可以以多种方式使用Undercore.js中的.template,其中之一是提供模板字符串和数据并获取HTML(或者至少这是一段时间前的工作方式)。在Lodash中,您会收到一个函数,然后您应该向该函数提供数据。_(something).map(foo)在Undercore.js中工作,但在Lodash中,我不得不将其重写为_.map(somethink,foo)。也许这只是TypeScript问题。
Lodash的灵感来自Underscore.js,但现在它是一个更好的解决方案。你可以定制你的版本,拥有更高的性能,支持AMD,并拥有更多的功能。检查jsperf上的Lodash与Undercore.js基准测试。。。这篇关于Lodash的精彩文章:
处理集合时,最有用的功能之一是速记语法:(尽管Undercore现在也支持此语法)
var characters = [
{ 'name': 'barney', 'age': 36, 'blocked': false },
{ 'name': 'fred', 'age': 40, 'blocked': true }
];
// Using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });
// Using Underscore.js
_.filter(characters, character => character.age === 36);
// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]
(摘自Lodash文档)