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

sei*_*cle 3 javascript jquery jquery-plugins guava data-structures

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

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

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

Xae*_*ess 6

如果通过JS"丰富的数据结构集合"来表示使用JavaScript ArrayObjects以及JavaScript本身的实用程序,那么我建议使用Underscore.js:

Underscore是一个用于JavaScript的实用程序带库,它提供了许多函数式编程支持.(...)下划线提供了支持常用的功能性犯罪嫌疑人60余功能:map, select,invoke-以及更专业的帮手:功能结合,JavaScript的模板,深平等的测试,等等.它委托给内置函数,如果存在的话,那么现代的浏览器将使用的本地实现forEach,map,reduce,filter,every, someindexOf.

它还具有类似Set的函数,如union,intersectiondifference类型检查函数isXXX(isArray等),函数好东西和你自己编写的更多东西,没有这样的库.

Underscore有干净的代码,经过充分测试并且非常流行,我每天都在JS项目中使用它.


编辑问题编辑后:

我知道Guava有multimaps,multiset等,但它们都是Java设计的后果,很难在JS中编写这些集合的1对1实现.这是因为Javascript 没有:

  • 静态打字,
  • Java语言中的类,使用原型而不是(参见这个答案),
  • 接口(但另一方面,它具有作为第一类对象的功能),
  • 容易定义的对象相等(var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2false)

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

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


dav*_*non 6

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