主要特性
Func.js 基于模块化开发,聚焦解决大量重复场景与常用需求,如
- 一致化的集合操作,如object/set/array/collection/list的遍历、映射、断言、聚合等
//遍历对象_.each({'1':'a','2':'b','3':'c'},console.log)//遍历DOM_.each(document.body.children,console.log)//遍历数组_.each([1,2,3],console.log)//遍历Set_.each(new Set([1,2,3],console.log)
- 常见的arraylike需求,如去重、扁平化、切片等
//[1,2,4,"a","1",null]console.log(_.uniq([1,2,2,4,4,'a','1','a',null,null]))
- 日期时间的量化操作、判断、格式化等
//-59console.log(_.compareDate(new Date('2019/01/01'),'2019/3/1'))//21-12-11 10:09:08console.log(_.formatDate('2021-12-11T10:09:08','yy-MM-dd hh:mm:ss'))
- 数字格式化、处理等
//¥1,234.10元console.log(_.formatNumber(1234.1, '¥,000.00元'))//trueconsole.log(_.gt(2,1))
- 深度 clone、各种字符串转换等
//trueconsole.log(_.cloneDeep({d:new Date}).d instanceof Date)
- tree 操作
//tree nodes...console.log( _.arrayToTree(data, 'id', 'pid', { sortKey: 'sortNo', attrMap: { text: 'name' }, }))
高级特性
- 部分应用
// 2748let hax2num = _.partial(parseInt, undefined, 16)console.log(hax2num('abc'))
- 惰性计算及列表推导
//6-12_([1, 2, 3, 4]) .map((v) => v * 3) .filter((v) => v % 2 === 0) .join('-') .value()
- 自定义扩展
//mixins_.mixin({ select: _.get, from: _.chain, where: _.filter, top: _.head,})//invoke_.from(list).where(conditions).top().select(field).value()
TS 支持
- 类型断言
let s: any = xxif (_.isString(s)) { s.trim() //断言为string类型}
- 泛型
let obj = { a: 1, b: 2, c: 3 }_.each<number, string>(obj, (v, k) => { //v,k分别是number及string类型})
- 重载
let obj = { a: 1, b: 2, c: 3 }_.each<number>(obj, (v, k) => { //v,k分别是number及string|number|symbol类型})
横向对比
- Underscore.js
Func.js 拥有更丰富的内置函数且支持列表推导及惰性计算
- Lodash
Func.js 具有更高的性能及更好的业务贴合度
扩展库
- func.browser.js 专用于浏览器的常用函数包