我正在寻找具有持久数据结构的函数库。我只需要嵌套数组和字典。有一些functional javascript libraries,但它们不适合不变性。我希望能够写
var dict = makeDictionary({
'foo': 1;
'bar': {
'ely': 2;
}
});
var newDict = dict.assoc('foo', 42).assoc('bar', 'tender', 30).dissoc('bar', 'ely');
assert.eq dict.bar.ely, 2; // unchanged
assert.eq newDict.bar.tender, 30; // added
assert.eq newDict.bar.ely, undefined; // removed
虽然在某些情况下underscore接近,特别是对于数组,它会修改字典参数。我也可以使用clojurescript,但我更喜欢更轻量级的方法。
答案 0 :(得分:8)
我看看森。它打包了ClojureScript的功能数据结构,可以使用普通的旧Javascript。由于数据结构来自ClojureScript,我希望它们比其他库更好地测试,更完整,性能更高。
答案 1 :(得分:3)
我最终确定了我的持久性地图的实现(并将很快完成持久性向量),因为似乎需求不断增加。
有几个细节与例如Java(缺乏equals,hashCode依赖),因此实现使用排序平衡二叉树(平衡实际上是通过不变性来简化和加速)和===用于相等和<或自定义函数低于。
feat-sorted-map.js at github.com
提供了Feat.js的代码(项目代码名称) 在线查看包含有效工作测试的网页目前,除了源代码和测试之外没有任何文档,但我正在努力完成它。
更新:还有一个持久性向量的实现,并且速度已经提高了几个数量级。 (它也已经清理过了)feat-vector.js at github.com
答案 2 :(得分:0)
还有:
https://github.com/hughfdjackson/immutable
这基于持久性散列特里算法:
https://github.com/hughfdjackson/persistent-hash-trie
可能值得研究。
这个代码的代码更好,但是我的基准测试显示它比上面列出的速度快了近一个数量级。