lodash List缓存源码如何为?

摘要:昨日我沿着河岸漫步到芦苇弯腰喝水的地方 顺便请烟囱在天空为我写一封长长的信 潦是潦草了些而我的心意则明亮亦如你窗前的烛光稍有暧昧之处势所难免因为风的缘故 ——洛夫《因为风的缘故》 本文为读 lodash 源码的第七篇,后续文
昨日我沿着河岸/漫步到/芦苇弯腰喝水的地方 顺便请烟囱/在天空为我写一封长长的信 潦是潦草了些/而我的心意/则明亮亦如你窗前的烛光/稍有暧昧之处/势所难免/因为风的缘故 ——洛夫《因为风的缘故》 本文为读 lodash 源码的第七篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新,gitbook地址:pocket-lodash 作用与用法 在之前的《lodash源码分析之Hash缓存》介绍过用 Hash 做缓存的情况,在这篇文章中介绍过,lodash 是想要实现和 Map 一样的接口。 Hash 其实是用对象来做缓存,但是对象有一个局限,它的 key 只能是字符串或者 Symbol 类型,但是 Map 是支持各种类型的值来作为 key,因此 Hash 缓存无法完全模拟 Map 的行为,当遇到 key 为数组、对象等类型时,Hash 就无能为力了。 因此,在不支持 Map 的环境下,lodash 实现了 ListCache 来模拟,ListCache 本质上是使用一个二维数组来储存数据。 ListCache 的调用方式和 Hash 一致: new ListCache([ [{key: 'An Object Key'}, 1], [['An Array Key'],2], [function(){console.log('A Function Key')},3] ]) 返回的结果如下: { size: 3, __data__: [ [{key: 'An Object Key'}, 1], [['An Array Key'],2], [function(){console.log('A Function Key')},3] ] } 结构和 Hash 类似,但是 __data__ 变成了数组。 接口设计 ListCache 的接口与 Hash 一样,同样实现了 Map 的数据管理接口。
阅读全文