js库支持各种数据结构? (比如java中的番石榴)

时间:2012-09-04 15:53:32

标签: javascript jquery jquery-plugins data-structures guava

来自Java我真的很喜欢Guava提供的丰富数据结构集合所提供的灵活性。是否有类似番石榴的" js或jquery中的库?

注意:我听说关闭了,看起来有点沉重 - 更简单? (或者真正关闭我需要的东西吗?)

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

2 个答案:

答案 0 :(得分:6)

如果通过“JS的丰富的数据结构集合”,你意味着在JavaScript ArrayObject以及JavaScript本身上运行的实用程序,那么我就是推荐Underscore.js

  

Underscore是一个用于JavaScript的实用程序带库,提供了一个   很多函数式编程支持。 (...)Underscore提供   支持常见功能嫌疑人的60多个功能:map,   selectinvoke - 以及更专业的助手:功能   绑定,javascript模板,深度相等测试等。它   委托内置函数,如果存在,所以现代浏览器将   使用forEachmapreducefilterevery的原生实现,   someindexOf

它还具有类似于集合的函数,例如unionintersectiondifference,类型检查函数isXXX(isArray等),函数好东西以及更多东西你没有这样的图书馆就自己写。

Underscore有干净的代码,经过充分测试,quite popular这些天,我每天都在JS项目中使用它。


问题编辑后

编辑

我知道Guava有多图,多重等等,但它们都是Java设计的后果,而且很难在JS中编写这些集合的1对1实现。这是因为Javascript有

  • 静态输入,
  • Java语言中的类,改为使用原型(参见this answer),
  • 接口(但另一方面,它具有作为第一类对象的功能),
  • 容易定义的对象相等(var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2false

因此很难编写通用的Set实现,而不是提及Multiset或Multimap。例如,有一些Set实现,如Closure's onethis one,但它们并不完美 - 首先修改插入Set(!)的元素,第二个不是主流的,经过良好测试的项目(和个人我从来没有用过它所以不能多说了。)

在Javascript中,您只需执行var multimap = { key: [ 1, 2, 3.0 ], key2: [ 4, 'test', { bla: null }, 1 ] },并且由于语言设计,您不能只执行multimap.containsValue({ bla: null })。我提到了underscore.js,因为它具有95%的实用功能,你将使用JS集合,即数组和对象。如果你想要更多,只需使用Closure's structs,但库本身就很大。

答案 1 :(得分:6)

现在有一个更轻,更快的替代Underscore.js:Lo-Dash(http://lodash.com/)。