《JavaScript工具库之Lodash详解.docx》由会员分享,可在线阅读,更多相关《JavaScript工具库之Lodash详解.docx(1页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaScript工具库之Lodash详解前言你还在为JavaScript中的数据转换、匹配、查找等烦恼吗? 一堆看似简单的foreach,却冗长无趣可仍还在不停的repeat it ! 也许你已经用上了Underscore.js -不错,你已经进步很大一步了。然而今天我希望你能更进一步,利用lodash替换掉 Underscore。lodash一开始是Underscore.js库的一个fork,因为和其他(Underscore.js的)贡献者意见相左。John-David Da代on的最初目标, 是提供更多“一致的跨浏览器行为,并改善性能”。之后,该工程在现有成功的基础之上取得了更大的成果
2、。最近lodash也 发布了3.5版,成为了npm包仓库中依赖最多的库。它正在摆脱尾丝身份成为开发者的常规的选择之一。现在我们所熟知的很多开源工程都已经使用或者转到了lodash阵营之上。比方JavaScript转译器Babel、博客平台Ghost,和项 目脚手架工具Yeoman。特别Ghost是从Underscore迁移至!了lodash,Ghost的创始人John ONolan对于此曾评价到:“这是一 个非常明智的选择,它几乎完全是由我们开源开发社区推动的。我们发现lodash包含更多的功能,更好的性能、恰到好处地使 用了semver,并且在Node.js社区(以及其他依赖)中越来越抢眼。
3、lodash演练lodash主要使用了延迟计算,使得lodash其性能远远超过Underscore。在lodash中延迟计算意味着在我们的链式方法在显示 或隐式的value。调用之前是不会执行的。由于这种执行的延后,因此lodash可以进行shortcut fusion这样的优化,通过合并 链式iteratee大大降低迭代的次数。从而大大提供其执行性能。百说不如一练下面我们以用户信息为例:var users =user*: barney, age: 36 ,user*: fred, age: 40 ,user*: pebbles, age1:18;.获取所有用户名字,并以“分割var name
4、s = _.chain(users) .map(function(user) retu rn user.user;).join(,).value();console.log(names);个人七较喜欢lodash延迟计算的现实value,以及JavaScript的函数式风格。在这里首先将users对象包装成为lodash对象,再 map获取所有用户的名称,并最后利用join将用户名称以”,“连接在一起。注意这里只是一串方法链,如果你没有显样的调用 value方法,使其立即执行的化,你将会得到如下的LodashWrapper延迟表达式:LodashWrapper _wrapped_: LazyW
5、rapper,actions_: Array1, chain_: true, constructor: function, after: function.因为延迟表达式的存在,因此我们可以屡次增加方法链,但这并不会被执行,所以不会存在性能的问题,最后知道我们需要使 用的时候,使用value显式立即执行即可。1 .获取最年轻的用户var youngest = _.chain(users) .min(function(user) retur n user.age;).value();console.log(youngest);这里利用了lodash提供的min函数可以轻易的解决。在这里博主还希望
6、用另外一个方式解释lodash方法链的优化,上面的方法可以等价为下面的方式,以age排序的第一个user:var youngest2 = _.chain(users).sortBy(age).map(function(user) console.I og(map, user); return user;).first().value();console.Iog(youngest2);在这里博主多加了一个map作为log输出,如果你执行这行代码的时候,你会惊奇的看见这里只会有一个user的输出这点可 以证明在立即执行的时候lodash为我们的方法链做了可靠的优化;如果我们去掉first函数你那么
7、会看见有3个user对象的输出。2 .获取最年长的用户var oldest = _.chain(users) .max(function(user) retu rn user.age;).value();console.Iog(oldest);这里那么使用lodash的max函数。3 .用户数组到用户Map的转换在开发中我们经常会有把一堆素组形式的数据转换为Object形式的数组,便于根据属性key值查找,下面将以user对象来演 示:var userObj = _.chain(users).map(function(user)return user.user, user.age;).zipObject().value();console.log(userObj);利用lodash首先将user数组map为key,value的数组集合最后利用zipObject将结果转换为Object对象 zipObject会利用结 果集的第一项作为key,第二项作为value生Object 结尾以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
限制150内