Lo-Dashのドキュメントを見ると、APIが次のカテゴリに分類されていることがわかります。
Arrays APIの詳細を見ると、配列に適用できる約30の異なるメソッドが利用可能です。
コレクションAPIには、アレイAPIよりもいくつかのメソッドがあり、それらは同じメソッドを共有しません。
コレクションAPI内では、コレクションは反復されるオブジェクトとして記述され、配列の場合もあります。
コレクション(配列|オブジェクト|文字列):反復するコレクション。
また、興味深いことに、Collections APIメソッド_.toArray
コレクションから配列を返します:
議論
コレクション(配列|オブジェクト|文字列):変換するコレクション。戻り値
(配列):新しく変換された配列を返します。
Lo-Dash APIの配列とコレクションの正式な違いを知っている人はいますか?私はそれがBackbone.jsによる違いであると推定されていましたが、メソッドが他の場所で利用できる可能性があるため、そのための私の推論に疑問を投げかけています。前もって感謝します。
この区別の元となった、より複雑な nderscore.jsのドキュメント を確認することをお勧めします。それは述べています:
コレクション関数は、配列、オブジェクト、および
arguments
、NodeListなどの配列のようなオブジェクトで機能します。しかし、それはダックタイピングによって機能するので、数値のlength
プロパティを持つオブジェクトを渡さないでください。
基本的に、「コレクション」はある種の「反復可能な」インターフェースを実装するものであり、内部的には同じ反復法を使用します(ただし、Lodashソースはアンダースコアより少し複雑です)。すべての「コレクションメソッド」は、配列とオブジェクトの両方(およびいくつかの反復可能なもの)の両方で機能しますが、配列メソッドは配列(または.length
および数値インデックス)、およびオブジェクトメソッドは任意のオブジェクトで機能します。
すべての配列はコレクションですが、すべてのコレクションが配列であるとは限りません。オブジェクト(つまり、{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/
関数が取得する引数は、どのようなことを繰り返しているかによって異なります。配列を繰り返し処理している場合は要素とインデックスを取得し、オブジェクトを繰り返し処理している場合は値とキーを取得します。