具有持久数据结构的Javascript函数库

时间:2012-04-27 13:30:12

标签: data-structures functional-programming javascript persistent-data

我正在寻找具有持久数据结构的函数库。我只需要嵌套数组和字典。有一些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,但我更喜欢更轻量级的方法。

3 个答案:

答案 0 :(得分:8)

我看看森。它打包了ClojureScript的功能数据结构,可以使用普通的旧Javascript。由于数据结构来自ClojureScript,我希望它们比其他库更好地测试,更完整,性能更高。

https://github.com/swannodette/mori

答案 1 :(得分:3)

我最终确定了我的持久性地图的实现(并将很快完成持久性向量),因为似乎需求不断增加。

有几个细节与例如Java(缺乏equals,hashCode依赖),因此实现使用排序平衡二叉树(平衡实际上是通过不变性来简化和加速)和===用于相等和<或自定义函数低于。

feat-sorted-map.js at github.com

提供了Feat.js的代码(项目代码名称)

您可以在feat.js at cofylang.org

在线查看包含有效工作测试的网页

目前,除了源代码和测试之外没有任何文档,但我正在努力完成它。

更新:还有一个持久性向量的实现,并且速度已经提高了几个数量级。 (它也已经清理过了)feat-vector.js at github.com

答案 2 :(得分:0)

还有:

https://github.com/hughfdjackson/immutable

这基于持久性散列特里算法:

https://github.com/hughfdjackson/persistent-hash-trie

可能值得研究。

这个代码的代码更好,但是我的基准测试显示它比上面列出的速度快了近一个数量级。