【问题标题】:js library to support various data structures? (like guava in java)js库支持各种数据结构? (就像java中的番石榴)
【发布时间】:2012-09-04 15:53:32
【问题描述】:

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

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

注意 2:“丰富的数据结构集合”是指排序的映射和集合、多映射(允许重复键)和多集合(允许具有多个条目的集合 - 看起来很奇怪但实际上非常有用!)等等。

【问题讨论】:

  • Javascript 不是 Java,因此很难为 Javascript 提供像 Collections 框架这样的整个 Java / Guava 好东西...

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


【解决方案1】:

如果 JS 的“数据结构的丰富集合” 是指在 JavaScript Arrays 和 Objects 和 JavaScript 本身上运行的实用程序,那么我推荐 Underscore.js

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

它还具有类似 Set 的函数,例如 unionintersectiondifference、类型检查函数 isXXX(isArray 等)、函数好东西以及更多没有此类库的情况下您自己编写的东西.

Underscore 代码简洁,经过良好测试,quite popular 这些天,我每天在 JS 项目中使用它。


EDIT 问题编辑后:

我知道 Guava 有 multimaps、multiset 等,但它们都是 Java 设计的结果,很难在 JS 中编写这些集合的一对一实现。这是因为 Javascript 有 no

  • 静态类型,
  • 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,但库本身就很大。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多