【发布时间】:2012-05-08 06:09:09
【问题描述】:
我正在寻找具有持久数据结构的函数库。我只需要嵌套数组和字典。有一些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,但我更喜欢更轻量级的方法。
【问题讨论】:
-
@FlavioCysne 我只是看了看,看不出它与我的问题有什么关系。
-
只是为了澄清(因为我目前正在做一些非常相似的事情),您是否需要将生成的持久性地图作为包含“。”的本机对象。使用权?这将需要使用 getter 进行模拟,或者从修改中复制整个结构并将其冻结,这对于大型平面地图来说很快就会变得低效(并且都需要 ES5)......或者你对访问内容的函数/方法没问题(我的方法)?
-
我对 doc-access 解决方案最满意,但看到了它的缺点。反正我没有大地图。 ES5 要求……好吧,我会考虑你的函数访问方法。
-
我添加了一个替代方案(用于衡量与幼稚方法相比的性能提升)。我添加了天真的持久性地图“Nap”,它可以进行完整的写时复制。 assoc/dissoc 有两种变体,但是一旦你完成后你会得到一个原生对象(如果支持 ES5,可能会冻结)你可以像往常一样访问。
标签: data-structures functional-programming javascript persistent-data