也许您已经在使用Underscore.js,但今天我希望您能更进一步,用lodash 替换Underscore。
由于与其他(Underscore.js) 贡献者存在分歧,lodash 最初是Underscore.js 库的一个分支。 John-David Dalton 的最初目标是提供更“一致的跨浏览器行为并提高性能”。该项目随后在现有成功的基础上取得了更大的成果。最近,lodash也发布了3.5版本,使其成为npm包仓库中最值得信赖的库。它正在摆脱“刁石”的地位,成为开发者的常规选择之一。
lodash的性能比Underscore好很多,因为lodash主要使用惰性计算。
大声说出来比练习要好。我们以用户信息为例。
var users=[ { 'user': 'Barney', 'age': 36 }, { 'user': 'Fred', 'age': 40 }, { 'user': 'pebbles', 'age': 18 }];1. 获取所有用户名并用“,”分隔。
var names=_.chain(users) .map(function(user){ return user.user; }) .join(', ') .value();console.log(names); 就我个人而言,我更喜欢使用lodash延迟计算。 JavaScript 的真正价值和函数式风格。这里,首先将users对象打包成lodash对象,然后使用map获取所有用户的名称,最后使用join将用户名用“,”连接起来。请注意,这只是一个方法链。如果您显式调用value 方法并且不立即运行它,您将得到以下LodashWrapper 延迟表达式:
LodashWrapper {__wrapped__: LazyWrapper, __actions__: Array[1], __chain__: true,constructor: function, after: function.} 由于延迟表达式的存在,可以多次添加方法链,但是不会执行,导致性能变慢。问题是,当你最终发现需要使用它时,你可以立即使用value 来显式地执行它。
2. 获取最年轻的用户
var youngest=_.chain(users) .min(function(user){ return user.age; }) .value();console.log(youngest); 这可以通过使用lodash 提供的min 函数来完成。很容易解决。
这里博主也想换一种方式来解释lodash方法链优化。上述方法等价于以下方法,其中第一用户按年龄排序。
var youngest2=_.chain(users) .sortBy('age') .map(function(user){ console.log('map', user); return user; }) .first() .value();console .log(youngest2); 这里博主额外添加了一张地图作为日志输出。如果您立即运行此命令,您会注意到只有一个用户输出。对方法链进行了稳健的优化。删除第一个函数后,您将看到三个用户对象的输出。
3. 获取最老的用户
var old=_.chain(users) .max(function(user){ return user.age; }) .value();console.log(oldest);这里我们使用lodash的max函数。
4. 将用户数组转换为用户映射
在开发中,我们经常将一堆原始格式的数据转换为对象格式的数组,以便于根据属性键值进行搜索。以下解释使用用户对象。
var userObj=_.chain(users) .map(function(user){ return [user.user, user.age]; }) .zipObject() .value();console.log(userObj);Lodash 第一个用户使用的数组映射是[key, value]数组的集合。最后,使用zipObject 将结果转换为Object 对象。 zipObject 使用结果集中的第一项作为键,第二项作为值。生成一个对象。
结尾
这只是lodash API 的一小部分。正如文章开头提到的,lodash 的目标是提供一个API,提供更多“一致的跨浏览器行为并提高性能”。所有lodash API 均可在https://lodash.com/docs#matches 中找到。
本文描述的演示也可以在jsbin http://jsbin.com/xocixubaru/1/edit?html,js,output 进行演示。
--
关注切图网头条号
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。