web-dev-qa-db-ja.com

ローダッシュ、配列とコレクションの違い

Lo-Dashのドキュメントを見ると、APIが次のカテゴリに分類されていることがわかります。

  1. 配列、
  2. 連鎖、
  3. コレクション、
  4. 関数、
  5. オブジェクト、
  6. ユーティリティ、
  7. メソッド、
  8. とプロパティ

Arrays APIの詳細を見ると、配列に適用できる約30の異なるメソッドが利用可能です。

コレクションAPIには、アレイAPIよりもいくつかのメソッドがあり、それらは同じメソッドを共有しません。

コレクションAPI内では、コレクションは反復されるオブジェクトとして記述され、配列の場合もあります。

コレクション(配列|オブジェクト|文字列):反復するコレクション。

また、興味深いことに、Collections APIメソッド_.toArrayコレクションから配列を返します:

議論

コレクション(配列|オブジェクト|文字列):変換するコレクション。戻り値

(配列):新しく変換された配列を返します。

Lo-Dash APIの配列とコレクションの正式な違いを知っている人はいますか?私はそれがBackbone.jsによる違いであると推定されていましたが、メソッドが他の場所で利用できる可能性があるため、そのための私の推論に疑問を投げかけています。前もって感謝します。

33
aug2uag

この区別の元となった、より複雑な nderscore.jsのドキュメント を確認することをお勧めします。それは述べています:

コレクション関数は、配列、オブジェクト、およびarguments、NodeListなどの配列のようなオブジェクトで機能します。しかし、それはダックタイピングによって機能するので、数値のlengthプロパティを持つオブジェクトを渡さないでください。

基本的に、「コレクション」はある種の「反復可能な」インターフェースを実装するものであり、内部的には同じ反復法を使用します(ただし、Lodashソースはアンダースコアより少し複雑です)。すべての「コレクションメソッド」は、配列とオブジェクトの両方(およびいくつかの反復可能なもの)の両方で機能しますが、配列メソッドは配列(または.lengthおよび数値インデックス)、およびオブジェクトメソッドは任意のオブジェクトで機能します。

32
Bergi

すべての配列はコレクションですが、すべてのコレクションが配列であるとは限りません。オブジェクト(つまり、{k: v, ... })は配列ではないコレクションです。イテレータの多くは、配列以外のコレクションを問題なく反復できます。このコンテキストでは、配列は、多かれ少なかれ、連続する非負の整数によってインデックスが付けられた、順序付けられたコレクションと考えることができます。

たとえば、次の両方が機能します。

_([6, 11, 23]).each(function() {
    console.log(arguments);
});
_({ a: 6, b: 11, c: 23 }).each(function() {
    console.log(arguments);
});

デモ: http://jsfiddle.net/ambiguous/t8a83/

関数が取得する引数は、どのようなことを繰り返しているかによって異なります。配列を繰り返し処理している場合は要素とインデックスを取得し、オブジェクトを繰り返し処理している場合は値とキーを取得します。

11
mu is too short