【问题标题】:Javascript data structures library [closed]Javascript数据结构库[关闭]
【发布时间】:2011-08-20 01:10:13
【问题描述】:

我想请教一些 JavaScript 库/库的推荐,这些库提供一些基本数据结构的实现,例如优先级队列、带有任意键的映射、尝试、图等,以及一些对其进行操作的算法.

我最感兴趣的是:

  • 涵盖的一组功能,
  • 解决方案的灵活性 - 这主要适用于图表。例如,我是否必须使用提供的图形实现,
  • 使用语言的功能特性 - 有时它提供更大的灵活性,
  • 实施的性能

我想指出,我知道可以使用 JavaScript 实现以下数据结构:

  • 一个映射,如果键值是字符串或数字,
  • 一组,(使用地图实现),
  • 一个队列,尽管正如下面指出的那样,它在某些浏览器上效率很低,

目前我最感兴趣的是优先级队列(不要与常规队列混淆),即对输入图的格式不是很干扰的图实现。例如,他们可以使用回调来遍历图的结构,而不是访问一些具有固定名称的具体属性。

【问题讨论】:

  • 不是一个真正的答案,所以我会评论:其中一些是语言的一部分。所有 JavaScript 对象都是具有任意键的映射;由于属性值可以是对象,它们形成了图形。 JavaScript“数组”(aren't really arrays)提供堆栈功能(pushpop)。
  • @Crowder 是的,我同意。但是键确实必须是数字或字符串,所以我不会称它为任意的。对于 push & pop,我当然可以使用它来实现队列,但对优先级队列没有太大帮助。求js缺少的数据结构(缺少很多)。
  • 这就是为什么它是评论,而不是答案。 :-) (是的,属性名称必须是字符串。事实上,即使是数组索引也是属性名称,因此也是字符串,尽管我们几乎总是使用数字——理论上它们被转换为字符串然后查找属性,尽管人们希望实现对其进行优化。)

标签: algorithm data-structures javascript


【解决方案1】:

我推荐使用闭包库(尤其是闭包编译器)。

这里有一个带有数据结构goog.structs 的库。 该库包含:

goog.structs.AvlTree
goog.structs.CircularBuffer
goog.structs.Heap
goog.structs.InversionMap
goog.structs.LinkedMap
goog.structs.Map
goog.structs.PriorityQueue
goog.structs.Set

例如,您可以使用单元测试:goog.structs.PriorityQueueTest

如果您需要处理数组,还有一个数组库:goog.array

如 cmets 中所述,源已移至 github.com/google/closure,文档的新位置为:google.github.io/closure-library

【讨论】:

【解决方案2】:

尤其是对于类图结构,我发现graphlib 非常方便:

https://github.com/cpettitt/graphlib/wiki/API-Reference

它非常简单,比我尝试过的其他实现更快,具有所有基本功能、流行的图形算法和 JSON 数据导出。

【讨论】:

    【解决方案3】:

    你可以试试Buckets是一个非常完整的JavaScript数据结构库,包括:

    • 链接列表
    • 字典
    • 多字典
    • 二叉搜索树
    • 堆栈
    • 队列
    • 设置
    • 二进制堆
    • 优先队列

    【讨论】:

      【解决方案4】:

      添加一个自定义javascript库的链接,该库提供Priority Queues、Tries、Basic Graph processing和其他实现,以供该线程的访问者将来参考。查看dsjslib

      【讨论】:

        【解决方案5】:

        您的 javascript 是在应用程序还是网页中?如果是应用程序,为什么不将数据结构外包给Redis?有一个client for nodejs

        Redis 是一个开源的高级键值存储。它通常被称为数据结构服务器,因为键可以包含字符串、哈希、列表、集合和排序集合。

        【讨论】:

        • 好点,但在我的情况下,它是客户端 Javascript。
        • “客户端”是什么意思?
        • 我的意思是它在浏览器中运行。
        【解决方案6】:

        Efficient queue.

        如果您发现更多这些,请将它们添加到jswiki。谢谢。 :)

        【讨论】:

          【解决方案7】:

          我可以为您提供任意键的映射:我的jshashtable 就是这样做的,并且还有一个基于它的哈希集实现。

          【讨论】:

            【解决方案8】:

            data.js.

            我不相信它有你想要的那样丰富的功能,但它有图表、散列和集合。

            我认为这是一个轻量级的开始,您可以继续扩展。

            至于它提供的功能,它写得很好、效率很高并且有文档记录。

            【讨论】:

            • 这个链接重定向到http://substance.io/composer/——一个在线打印资源。请更新 ansere!
            【解决方案9】:

            您想要的大部分内容可能都以某种方式内置到 Javascript 中,或者易于与内置功能组合在一起(原生 Javascript 数据结构非常灵活)。你可能会喜欢JSClass

            至于语言的功能特性,underscore.js 是它的所在..

            【讨论】:

            • 我不同意。像 underscore.js 这样的大多数库都提供了可用性特性——让你编写更短、更优雅的代码。这将如何帮助实施优先级队列。我特别要求提供 js 中不存在的功能。当然,我可以自己实现优先级以及尝试和图表,但是如果有人为我完成了它,我不介意使用这项工作。
            • 我会自己使用 underscore.js 路由并实现自己缺少的任何东西。 Google Closure 是一个很棒的库,但是当您将它与闭包编译器一起使用时,它确实会大放异彩,而且它看起来像是由 Java 编码器而不是 JavaScript 实现的。
            猜你喜欢
            • 1970-01-01
            • 2015-06-22
            • 2013-08-05
            • 2012-07-10
            • 2012-12-21
            • 2014-01-24
            • 2015-12-28
            • 1970-01-01
            • 2018-12-22
            相关资源
            最近更新 更多