JS の「データ構造の豊富なコレクション」によってJavaScriptArray
およびObject
JavaScript 自体を操作するためのユーティリティを意味する場合は、 Underscore.jsをお勧めします。
Underscore は、多くの関数型プログラミング サポートを提供する JavaScript 用のユーティリティ ベルト ライブラリです。map
(...) Underscore は、通常の機能的な疑わしいもの ( 、
select
、invoke
— と、より特殊なヘルパー (関数バインディング、javascript テンプレート、深い等価性テストなど)の両方をサポートする 60 奇数の関数を提供します) 。forEach
組み込み関数が存在する場合はその関数に委譲するため、最新のブラウザーは、map
、reduce
、filter
、every
および
のネイティブ実装を使用しsome
ますindexOf
。
union
また、 、intersection
、difference
、型チェック関数 isXXX (など) などのセットのような関数isArray
、関数グッズ、およびそのようなライブラリがなくても自分で作成できるものも含まれています。
Underscore はコードがきれいで、十分にテストされており、最近では非常に人気があります。私は JS プロジェクトで日常的に使用しています。
質問編集後の編集:
Guava にはマルチマップ、マルチセットなどがあることは知っていますが、それらはすべて Java 設計の結果であり、これらのコレクションの 1 対 1 の実装を JS で記述するのは困難です。これは、Javascript に:がないためです。
- 静的型付け、
- クラスはJavaの意味で、代わりにプロトタイピングを使用します(この回答を参照してください)、
- インターフェイス (ただし、一方でファーストクラスのオブジェクトとしての機能を備えています)、
- 簡単に定義されたオブジェクトの等価性 (
var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2
is 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を使用するだけですが、ライブラリ自体はかなり大きいです。