9

永続的なデータ構造を持つ機能ライブラリを探しています。ネストされた配列と辞書だけが必要です。いくつかの機能的な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

アンダースコアは、特に配列の場合に近い場合がありますが、辞書の引数を変更します。clojurescriptを使用することもできますが、より軽量なアプローチをお勧めします。

4

3 に答える 3

8

森を見てみます。プレーンな古いJavascriptから使用できるようにClojureScriptの機能データ構造をパッケージ化します。データ構造はClojureScriptからのものであるため、他のライブラリよりも優れたテスト、完全性、パフォーマンスを期待しています。

https://github.com/swannodette/mori

于 2013-11-10T23:28:07.037 に答える
3

需要が高まっているように思われるため、JavaScript用の永続マップの実装を完了しました(そしてすぐに永続ベクトルを終了します)。

たとえばJava(equalsの欠如、依存するhashCode)と比較していくつかの詳細があるため、実装では、ソートされた平衡二分木(平衡化は実際には単純化され、不変性によって高速化されます)を使用し、===は等式および<またはカスタム関数を使用します。より低い。

Feat.jsのコード(プロジェクトコード名)は、github.comのfeat-sorted-map.jsで入手できます。

cofylang.orgのfeat.jsで、実際に動作しているテストのページをオンラインで見ることができます。

現在、ソースコードとテスト以外のドキュメントはありませんが、私もそれを完成させるために取り組んでいます。

更新:そこでも利用可能な永続ベクトルの実装があり、速度は桁違いに改善されています。(これもクリーンアップされています)feat-vector.js at github.com

于 2012-05-03T13:36:16.637 に答える
0

またあります:

https://github.com/hughfdjackson/immutable

これは、永続的なハッシュトライアルゴリズムに基づいています。

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

調べる価値があるかもしれません。

このためのコードはより良いimhoですが、私のベンチマークは、上記のコードよりもほぼ1桁遅い速度で実行されていることを示しています。

于 2013-06-21T21:36:17.377 に答える