关于javascript:js库支持各种数据结构?

js library to support various data structures? (like guava in java)

来自Java的我非常喜欢由番石榴所提供的丰富的数据结构集合所提供的灵活性。JS或JQuery中是否有类似于"guava"的库?

注意:我听说了闭幕式,看起来有点重——有什么简单的吗?(还是说我真的需要关闭?)

注2:"丰富的数据结构集合"是指经过排序的地图和集合、多重地图(允许重复的键)和多重集合(允许多个条目的集合-看起来很奇怪,但实际上非常有用!)等。


现在有一种更轻、更快的下划线替代品:lo dash(http://lodash.com/)。


如果说JS的"丰富的数据结构集合"是指在javascript Arrays和Objects以及javascript本身上操作的实用程序,那么我建议使用underline.js:

Underscore is a utility-belt library for JavaScript that provides a
lot of the functional programming support. (...) Underscore provides
60-odd functions that support both the usual functional suspects: map,
select, invoke — as well as more specialized helpers: function
binding, javascript templating, deep equality testing, and so on. It
delegates to built-in functions, if present, so modern browsers will
use the native implementations of forEach, map, reduce, filter, every,
some and indexOf.

它还设置了类似于unionintersectiondifference的功能,类型检查功能是xxx(isArray等),功能好,还有没有这样的库你自己写的东西。

下划线有干净的代码,经过良好的测试,最近非常流行,我每天都在JS项目中使用它。

问题编辑后编辑:

我知道番石榴有MultuMaPS、MultSub等,但是它们都是Java设计的结果,很难在JS中编写1到1的这些集合的实现。因为javascript没有:

  • 静态分型,
  • Java意义下的类使用原型代替(参见此答案),
  • 接口(但另一方面具有作为一流对象的功能)
  • 容易定义的对象相等(var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2false)

所以很难编写通用的使用集实现,更不用说multiset或multimap了。例如,有一些集合实现,如闭包的一个或这个集合实现,但它们并不完美-首先修改插入集合中的元素!!)第二个不是一个主流的、经过良好测试的项目(我个人从未使用过它,所以不能说更多)。

在JavaScript中,您只需执行var multimap = { key: [ 1, 2, 3.0 ], key2: [ 4, 'test', { bla: null }, 1 ] },由于语言设计,您不能只执行multimap.containsValue({ bla: null })。我提到了underline.js,因为它有95%的实用程序函数,您可以使用JS集合,即数组和对象。如果您需要更多,只需使用闭包的结构,但库本身就相当大。