JS库支持各种数据结构?(如爪哇的番石榴)

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

本文关键字:番石榴 支持 数据结构 JS      更新时间:2023-09-26

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

注意:我听说过关闭,它似乎有点沉重 - 还有更简单的吗?(或者关闭真的是我需要的吗?

注2:我所说的"丰富的数据结构集合"是指排序映射和集合,multimaps(允许重复键(和multiset(允许多个条目的集合 - 看起来很奇怪,但实际上非常有用!(等。

如果 JS 的"丰富的数据结构集合">是指在 JavaScript 上操作的实用程序 Array s、Object 和 JavaScript 本身,那么我会推荐 Underscore.js:

Underscore 是一个用于 JavaScript 的实用程序带库,它提供了一个 很多函数式编程支持。(...)下划线提供 60多个功能,支持通常的功能嫌疑人:mapselectinvoke — 以及更专业的助手:功能 绑定、JavaScript 模板、深度相等测试等。它 委托给内置函数(如果存在(,因此现代浏览器将 使用forEachmapreducefiltereverysomeindexOf .

它还具有类似 Set 的函数,如 unionintersectiondifference、类型检查函数 isXXX(isArray 等(、函数好东西以及更多没有这样的库你会自己编写的东西。

Underscore有干净的代码,经过良好的测试并且现在很受欢迎,我每天都在JS项目中使用它。


问题编辑后编辑

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

  • 静态类型,
  • Java意义上的类,使用原型代替(见这个答案(,
  • 接口(但另一方面具有作为一类对象的函数(,
  • 易于定义的对象相等性(var t1 = { test: 1 }, t2 = { test: 1 }; t1 === t2 false(

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

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

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

js-sdsl

一个JavaScript标准数据结构库,以STL为基准C++。

该库具有严格的时间复杂度保证,可以放心使用。

最新的测试版包括迭代器函数,可以像 c++ 中的迭代器一样使用。

包含的数据结构

  • 向量
  • 队列
  • 链接列表
  • 德克
  • 优先级队列
  • 设置(使用 RBTree(
  • 地图(使用 RBTree(
  • 哈希集(仅供参考(
  • 哈希图(仅供参考(

用法

为了帮助您更好地使用,我们提供了此 API 文档。