/Lodash_realize

计划用九天实现Lodash

Primary LanguageJavaScript

为了加深对JS基础的理解,计划用9天实现Lodash工具库常用函数

  • 第一天,本来想按照lodash官方文档的顺序实现函数,但是发现好多比较函数(例如iteratee()/isEqual()/isMatchWith()/matches()等),在接下来的实现过程中会多次使用到,所以第一天首先实现了若干个比较函数。实现过程中发现isEqual考虑的不够完善,对象深比较是一个难题,回头会重新全面考虑,进行重写。

  • 第二天,基本按照文档顺序实现函数,主要内容为Array部分,实现过程中有部分函数可以调用同名迭代函数得到结果(例如uniq/uniqBy/uniqWith等等),考虑到尽可能简单,于是先写了迭代函数,而后调用解决。这部分基本没有遇到太大的问题,部分函数大同小异,唯一要注意的是部分涉及到迭代、对象比较的函数在实现过程中要充分考虑逻辑问题。

  • 第三天、第四天,基本还原了lodash文档的Array和Collection部分,其中isEqualWith函数未实现,案例测试未通过,准备参考一下源码。还有debounce(降频)/throttle(节流),源码考虑的比较全面,文件中的后续也会重写。

  • 第五天、第六天,完成了文档的Lang、Math、Number和部分Object函数,Lang基本都是isXX()比较函数,其中部分比较函数实现中遇到一些错误,总结时再提。

  • 第七天、第八天,基本达到了目标,修正了部分函数的逻辑。改善封装形式,但是总的来说,大部分函数是单纯使用JavaScript数据类型的方法来实现的,封装过于粗糙,如果后面再次重写,封装方法会参考Lodash.js源码方案,同时继续实现目前未实现的函数。

关于函数:

  • Lodash源码中对数据类型的处理基本都做了封装,例如basefunc(基础函数),本案例在实现过程中虽然考虑过函数的封装,但是由于经验不足,没有做到尽善尽美,封装略显粗糙,如果后续进行重写,会在函数封装上下功夫,同时实现本案例中未实现或者实现地不太完善的函数
  • 剩余内容待补充