主要特性

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 具有更高的性能及更好的业务贴合度

扩展库