背景:为了实现某些功能,如:数据排序、分组、筛选、深拷贝等,自己写的函数或网上搜索处理的转换函数质量无法保证,这时直接使用成熟的js第三方库是首选。
*注:“framework(框架)”,“library(库)”和“tool(工具)” 可以根据情境,在不同时期,对不同的人,意味着不同的东西。
一、Lodash 和 Underscore(推荐参考阮一峰的日志)
1.优点:将 Lodash 和 Underscore 放在一起,因为它们提供了数百个功能性的 JavaScript 实用程序来补充原生字符串,数字,数组和其他原始对象的方法。二者有一些功能性的重叠,所以你不太可能在一个项目中同事需要这两个库。
它在客户端使用率似乎很低,但是可以在服务器端的 Node.js 应用程序中使用这两个库。
- 小而简单
- 拥有优质文档,易于学习
- 与大多数库和框架兼容
- 不扩展内置对象
- 可以在客户端或服务器上使用
2.缺点:
- 有些方法只适用于ES2015及更高版本的 JavaScript
实例:
import * as _ from 'lodash' import * as _s from 'underscore' //数组去重对比 _.uniq([1,1,3]) // => [1,3] _s.uniq([1, 2, 1, 4, 1, 3]); => [1, 2, 4, 3]
分别是:异步请求、加密、日期转换
实例:
import * as _async from 'async' import * as _moment from 'moment' import * as _md5 from 'md5' shunXuAsync(){ // 异步 顺序执行 let task1 = function (callback) { console.log("task1"); callback(null, "task1") } let task2 = function (callback) { console.log("task2"); callback(null, "task2") // callback("err","task2") // null改为err ,如果中途发生错误,则将错误传递到回调函数,并停止执行后面的函数 } let task3 = function (callback) { console.log("task3"); callback(null, "task3") } _async.series([task1, task2, task3], function (err, result) { console.log("series"); if (err) { console.log(err); } console.log(result); } ) } console.log(_moment().format('MMMM Do YYYY, h:mm:ss a')) //当前时间+格式 console.log(md5('message'));//78e731027d8fd50ed642340b7c9a63b3
附:常用的几个Lodash函数
【浅拷贝】:
var objects = [{ 'a': 1 }, { 'b': 2 }]; var shallow = _.clone(objects); console.log(shallow[0] === objects[0]); // => true
如图:
【深拷贝】:
import _ from 'lodash' // 1.深拷贝 var objects = [{ 'a': 1 }, { 'b': 2 }]; var deep = _.cloneDeep(objects); console.log(deep[0] === objects[0]); // => false //2.分组 _.groupBy([6.1, 4.2, 6.3], Math.floor); // => { '4': [4.2], '6': [6.1, 6.3] } // The `_.property` iteratee shorthand. _.groupBy(['one', 'two', 'three'], 'length'); // => { '3': ['one', 'two'], '5': ['three'] } //3. 合并key、value _.zipObject(['a', 'b'], [1, 2]); // => { 'a': 1, 'b': 2 } //4.深比较不同