2010-11-28 4 views
8

私はJSのためのコレクションAPI(リスト、セット)のためにかなり長い間を探索してきた驚くほど私ができる唯一の本:http://www.coffeeblack.org/work/jscollections/JavaScript Collections API?

これはまさに私が探していたものですが、しない理由を私は思ったんだけどjQueryはそれを提供していますか?私は何が欠けていますか?または、おそらく、私の検索技術はどれほど効果的ではないでしょうか?

私は配列がpop()とpush()をサポートしていることを知っていますが、例えばcontains()が必要です。

+2

FYI - coffeeblackコレクションライブラリはjavascriptオブジェクトタイプのプロトタイプにプロパティを追加するため、私にとっては役に立たなかった。これは、$ .css(map) –

+1

のようないくつかの基本的なjquery機能を破ります。https://github.com/kriskowal/collections – Luis

答えて

1

javascriptは配列[]と連想配列{}の両方を持っているため、データ構造のほとんどのニーズはすでに解決されています。配列は順序付きリストを解決します。数値インデックスによる高速アクセスが可能ですが、連想配列は順序付けられていないハッシュマップとみなされ、文字列キーによる高速アクセスが解決されます。

自分のデータ構造の95%が必要です。

+0

もあります。ループ以外はどうしますか? – simpatico

+0

containsが主なアクセス方法である場合、私は連想配列を使用します。非常に大きなデータセットに対してordered list *と* containsが必要な場合は、配列と連想配列の両方を同じデータで使用します。 –

+0

小さなデータセットの場合、配列をループします。 –

5

jQueryの主な焦点は、DOMです。それはすべての人にすべてのことを試みるべきではありませんし、またそうすべきでもないので、コレクションのサポートの方法はあまりありません。 http://code.google.com/p/jshashtable/リストについて

Arrayはあなたが必要なものの多くを提供します。

マップとセットの場合、私は臆面もなくこれらの私自身の実装の方向にあなたを指すようにしたいと思います。あなたは配列のために必要かもしれませんほとんどのメソッドと同様に、あなたは(indexOf()メソッドのサポートのIE < = 8の不足に対処するためにあるほとんどが)数行で一緒方法をノックすることができます。

Array.prototype.contains = Array.prototype.indexOf ? 
    function(val) { 
     return this.indexOf(val) > -1; 
    } : 
    function(val) { 
     var i = this.length; 
     while (i--) { 
      if (this[i] === val) { 
       return true; 
      } 
     } 
     return false; 
    }; 

["a", "b", "c"].contains("a"); // true 
6

することができますJavaScriptのコレクションライブラリjs_colsを試してください。

4

また、bucketsを試すこともできます。最も多く使用されているコレクションがあります。

関連する問題