3

Java から来た私は、Guava が提供する豊富なデータ構造のコレクションによってもたらされる柔軟性が本当に気に入っています。jsまたはjqueryに「グアバのような」ライブラリはありますか?

注: クロージャーについて聞いたことがありますが、少し重いようです。もっと簡単なことはありますか? (または閉鎖は本当に私が必要とするものですか?)

注2:「データ構造の豊富なコレクション」とは、ソートされたマップとセット、マルチマップ(重複キーが許可されている)、およびマルチセット(複数のエントリが許可されているセット-奇妙に思えますが、実際には非常に便利です!)などを意味します.

4

2 に答える 2

6

JS の「データ構造の豊富なコレクション」によってJavaScriptArrayおよびObjectJavaScript 自体を操作するためのユーティリティを意味する場合は、 Underscore.jsをお勧めします。

Underscore は、多くの関数型プログラミング サポートを提供する JavaScript 用のユーティリティ ベルト ライブラリです。map(...) Underscore は、通常の機能的な疑わしいもの ( 、 selectinvoke— と、より特殊なヘルパー (関数バインディング、javascript テンプレート、深い等価性テストなど)の両方をサポートする 60 奇数の関数を提供します) 。forEach組み込み関数が存在する場合はその関数に委譲するため、最新のブラウザーは、mapreducefiltereveryおよび のネイティブ実装を使用しsomeますindexOf

unionまた、 、intersectiondifference、型チェック関数 isXXX (など) などのセットのような関数isArray、関数グッズ、およびそのようなライブラリがなくても自分で作成できるものも含まれています。

Underscore はコードがきれいで、十分にテストされており、最近では非常に人気があります。私は JS プロジェクトで日常的に使用しています。


質問編集後の編集:

Guava にはマルチマップ、マルチセットなどがあることは知っていますが、それらはすべて Java 設計の結果であり、これらのコレクションの 1 対 1 の実装を JS で記述するのは困難です。これは、Javascript に:がないためです。

  • 静的型付け、
  • クラスはJavaの意味で、代わりにプロトタイピングを使用します(この回答を参照してください)、
  • インターフェイス (ただし、一方でファーストクラスのオブジェクトとしての機能を備えています)、
  • 簡単に定義されたオブジェクトの等価性 ( var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2is false)

そのため、Multiset や Multimap について言及せずに、汎用の Set 実装を作成するのは困難です。たとえば、Closure の oneまたはthis oneのようないくつかの Set 実装がありますが、それらは完全ではありません。最初は Set に挿入された要素を変更し (!)、2 つ目は主流で十分にテストされたプロジェクトではありません (個人的には使用したことがありませんなのでこれ以上は言えません)。

Javascript では、ただ行うだけvar multimap = { key: [ 1, 2, 3.0 ], key2: [ 4, 'test', { bla: null }, 1 ] }で、言語設計のために、ただ行うことはできませんmultimap.containsValue({ bla: null })。underscore.js について言及したのは、これには JS コレクション (配列とオブジェクト) で使用する 95% のユーティリティ関数があるからです。さらに必要な場合は、Closure の structsを使用するだけですが、ライブラリ自体はかなり大きいです。

于 2012-09-04T16:27:10.290 に答える
6

Underscore.js に代わる、軽量で高速な Lo-Dash ( http://lodash.com/ ) があります。

于 2013-12-24T15:00:05.980 に答える