Ada*_*deg 9 javascript functional-programming persistent-data data-structures
我正在寻找一个具有持久数据结构的函数库.我只需要嵌套数组和字典.有一些功能性的JavaScript库,但它们不适合不变性.我希望能够写作
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
Run Code Online (Sandbox Code Playgroud)
虽然下划线在某些情况下很接近,特别是对于数组,它会修改字典参数.我也可以使用clojurescript,但我更喜欢更轻量级的方法.
我去看看森.它打包了ClojureScript的功能数据结构,可以使用普通的旧Javascript.由于数据结构来自ClojureScript,我希望它们比其他库更好地测试,更完整,更高效.
https://github.com/swannodette/mori
我最终完成了 JavaScript 的持久映射的实现(并将很快完成持久向量),因为似乎需求不断增加。
与 Java 相比,有几个细节(缺乏 equals,依赖 hashCode),因此实现使用排序平衡二叉树(平衡实际上通过不变性被简化和加速)和 === 等于和 < 或自定义函数低于。
Feat.js 的代码(项目代码名称)可在github.com 的 feat-sorted-map.js中找到
您可以在 cofylang.org 的 feat.js 上在线查看包含正在运行的工作测试的页面
目前,除了源代码和测试之外没有任何文档,但我也在努力完成它。
更新:那里也有一个可用的持久向量的实现,并且速度已经提高了几个数量级。(它也已被清理)github.com 上的 feat-vector.js
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |