2011-05-06 77 views
56

我想問一下JavaScript庫/庫的推薦,它提供了一些基本數據結構的實現,如優先級隊列,帶有任意鍵的映射,嘗試,圖等等以及一些算法對他們進行操作。JavaScript數據結構庫

我最感興趣:

  • 集的覆蓋功能,
  • 靈活性的解決方案 - 這主要適用於圖形。比如我必須使用所提供的圖形執行,
  • 使用的語言的功能特點 - 它再次有時提供了更大的靈活性,實施
  • 性能

編輯

好的,我想指出,我知道可以使用js實現以下數據結構:

  • 的地圖,如果鍵值是字符串或數字,
  • 一組,(使用地圖實現),
  • 隊列,儘管如在下面所指出的,它是在某些瀏覽器效率低,

目前我主要對優先級隊列感興趣(不要與常規隊列混淆),圖形實現對輸入圖形的格式不是很侵入。例如,他們可以使用回調來遍歷圖的結構,而不是訪問某些具有固定名稱的具體屬性。

+7

不是一個真正的答案,所以我會評論:其中一些是語言的一部分。所有JavaScript對象都是具有任意鍵的地圖;作爲屬性值可以是對象,它們形成圖形。 JavaScript「數組」([不是真正的數組])(http://blog.niftysnippets.org/2011/01/myth-of-arrays.html))提供了堆棧特性('push','pop')。 – 2011-05-06 09:36:41

+0

@Crowder是的,我同意。但鍵確實必須是數字或字符串,所以我不會把它稱爲任意的。對於push&pop,我確定我可以用它來實現一個隊列,但對於優先級隊列沒有太大的幫助。我正在尋求js缺乏的數據結構(它缺少很多)。 – julkiewicz 2011-05-06 09:40:58

+0

這就是爲什麼它是一個評論,而不是一個答案。 :-)(是的,屬性名稱必須是字符串,事實上,即使數組索引是屬性名稱,因此字符串,雖然我們幾乎總是使用數字 - 理論上*他們被轉換爲字符串,然後屬性是擡頭看,雖然有人希望實現優化。) – 2011-05-06 09:43:07

回答

32

我建議使用Closure庫(尤其是關閉編譯器)。

這裏有一個庫,其中包含數據結構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

如果您需要處理數組,還有一個數組庫lib:goog.array

如註釋中所述,源已移至github.com/google/closure,文檔的新位置是:google.github.io/closure-library

+0

當然看起來很有前途。我知道你可以使用它,而無需谷歌封閉編譯器? – julkiewicz 2012-03-19 15:35:40

+0

確實,使用它非常方便,因爲它正在進行類型檢查並幫助防止錯字和其他偶然的錯誤。 – 2012-03-19 16:02:28

+0

看起來像解決一個長期存在的問題。我一定會檢查出來。 – julkiewicz 2012-03-19 17:20:38

3

大概你想要的內容是以某種方式嵌入到Javascript中,或者很容易與內置功能(本地Javascript數據結構非常靈活)組合在一起。你可能會喜歡JSClass

有關語言的功能特性,underscore.js是那裏的AT ..

+3

我不同意。大多數庫(如underscore.js)都提供了可用性功能 - 可讓您編寫更短,更優雅的代碼。這將如何幫助實施一個優先隊列。我特別要求提供js中不存在的功能。當然,我可以通過嘗試和圖表來實現優先級,但是如果有人爲我做了這些工作,我不會介意使用這項工作。 – julkiewicz 2011-05-06 09:45:18

+0

我會與underscore.js一起走自己的路線,並執行任何缺少自己的東西。 Google Closure是一個非常棒的庫,但它在與閉包編譯器一起使用時會非常出色,除此之外它看起來像是由Java編碼器實現的而不是JavaScript。 – 2012-03-21 18:00:34

0

data.js

我不認爲它像功能豐富,但它有圖形,散列和集合。

我會把這個輕量級的開始,你可以延長。

至於它提供了什麼,它寫得很好,有效率和記錄。

+3

此鏈接重定向到「http:// substance.io/composer /」 - 一個在線打印資源。請更新! – Cody 2014-10-28 22:12:22

3

我可以用任意鍵爲您提供地圖幫助:我的jshashtable可以做到這一點,並且在其上還構建了一個哈希集合實現。

17

您可以嘗試Buckets是包含一個非常完整的JavaScript數據結構庫:

  • 鏈表
  • 字典
  • 多解釋
  • 二叉搜索樹
  • 堆棧
  • 隊列
  • 套裝
  • 二元堆
  • 優先級隊列
1

是您的JavaScript在應用程序或網頁?如果是應用程序,爲什麼不將數據結構外包給Redis?有一個client for nodejs

Redis是一個開源的高級鍵值存儲。它通常被稱爲數據結構服務器,因爲密鑰可以包含字符串,哈希,列表,集合和有序集合。

+1

不錯,但是在我的情況下,它是客戶端Javascript。 – julkiewicz 2012-03-22 17:55:00

+0

'客戶端'是什麼意思? – 2012-03-28 10:42:42

+0

我的意思是它在瀏覽器中運行。 – julkiewicz 2012-03-28 12:43:36

1

將鏈接添加到提供優先隊列,嘗試,基本圖形處理和其他實現的自定義JavaScript庫的鏈接,以供將來參考此線程的訪問者。退房dsjslib