来自 Java,我真的很喜欢 Guava 提供的丰富数据结构集合所提供的灵活性。js 或 jquery 中是否有“类番石榴”库?
注意:我听说过闭包,它似乎有点沉重——还有更简单的吗?(或者关闭真的是我需要的吗?)
注意 2:“丰富的数据结构集合”是指排序的映射和集合、多映射(允许重复键)和多集合(允许具有多个条目的集合 - 看起来很奇怪但实际上非常有用!)等。
来自 Java,我真的很喜欢 Guava 提供的丰富数据结构集合所提供的灵活性。js 或 jquery 中是否有“类番石榴”库?
注意:我听说过闭包,它似乎有点沉重——还有更简单的吗?(或者关闭真的是我需要的吗?)
注意 2:“丰富的数据结构集合”是指排序的映射和集合、多映射(允许重复键)和多集合(允许具有多个条目的集合 - 看起来很奇怪但实际上非常有用!)等。
如果JS 的“丰富的数据结构集合”是Array
指在 JavaScript和s 和 JavaScript 本身上操作的实用程序Object
,那么我推荐Underscore.js:
Underscore 是一个用于 JavaScript 的实用工具带库,它提供了大量的函数式编程支持。(...) Underscore 提供了 60 多种函数,它们支持常见的功能怀疑:
map
,select
,invoke
— 以及更专业的帮助器:函数绑定、javascript 模板、深度相等测试等。它委托给内置函数(如果存在),因此现代浏览器将使用forEach
、map
、reduce
、filter
、every
和 .some
indexOf
它还具有类似 Set 的函数,如union
、intersection
和difference
、类型检查函数 isXXX (isArray
等)、函数好东西以及更多你自己编写的东西,而无需这样的库。
Underscore 有干净的代码,经过良好测试并且现在很流行,我每天在 JS 项目中使用它。
问题编辑后编辑:
我知道 Guava 有 multimaps、multiset 等,但它们都是 Java 设计的结果,很难在 JS 中编写这些集合的 1 对 1 实现。这是因为 Javascript没有:
var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2
is false
)所以很难编写通用的Set实现,更不用说Multiset或Multimap了。例如,有一些 Set 实现,例如Closure 的 one或this 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 的 structs,但库本身非常大。
现在有一个更轻、更快的 Underscore.js 替代方案:Lo-Dash ( http://lodash.com/ )。