最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Lo-Dash, difference between array and collection - Stack Overflow

programmeradmin9浏览0评论

A glance at the Lo-Dash docs shows that the API falls in to categories of:

  1. Arrays,
  2. Chaining,
  3. Collections,
  4. Functions,
  5. Objects,
  6. Utilities,
  7. Methods,
  8. and Properties

A more detailed look in to the Arrays API shows approximately 30 different methods available that are applicable to arrays.

The Collections API has a few more methods than the Arrays API, and they do not share the same methods.

Within the Collections API, a collection is described as an object that is iterated, and may be an array:

collection (Array|Object|string): The collection to iterate over.

Also, interestingly, there's a Collections API method _.toArray that returns an array from a collection:

Arguments

collection (Array|Object|string): The collection to convert. Returns

(Array): Returns the new converted array.

Would anyone happen to know a formal difference between an array and collection in the Lo-Dash API? I was under the presumption it was a difference due to Backbone.js, however, am now questioning my reasoning to that end, since the methods may be available elsewhere. Thanks in advance.

A glance at the Lo-Dash docs shows that the API falls in to categories of:

  1. Arrays,
  2. Chaining,
  3. Collections,
  4. Functions,
  5. Objects,
  6. Utilities,
  7. Methods,
  8. and Properties

A more detailed look in to the Arrays API shows approximately 30 different methods available that are applicable to arrays.

The Collections API has a few more methods than the Arrays API, and they do not share the same methods.

Within the Collections API, a collection is described as an object that is iterated, and may be an array:

collection (Array|Object|string): The collection to iterate over.

Also, interestingly, there's a Collections API method _.toArray that returns an array from a collection:

Arguments

collection (Array|Object|string): The collection to convert. Returns

(Array): Returns the new converted array.

Would anyone happen to know a formal difference between an array and collection in the Lo-Dash API? I was under the presumption it was a difference due to Backbone.js, however, am now questioning my reasoning to that end, since the methods may be available elsewhere. Thanks in advance.

Share Improve this question asked May 28, 2014 at 20:52 aug2uagaug2uag 3,4453 gold badges33 silver badges54 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 44

It's a good idea to look at the more elaborate Underscore.js documentation, from which this distinction is derived. It states:

Collection functions work on arrays, objects, and array-like objects such as arguments, NodeList and similar. But it works by duck-typing, so avoid passing objects with a numeric length property.

Basically, "collections" are things that implement some kind of "iterable" interface, and they internally use the same iteration method (though Lodash source is a bit more convoluted than Underscore). All the "collection methods" do work both on arrays and objects (and a few more iterable things), while the array methods should only be used on arrays (or maybe everything with .length and numeric indices), and the object methods work on any objects.

All Arrays are collections but not all collections are arrays. An Object (i.e. {k: v, ... }) is a collection that is not an Array. Many of the iterators can iterate over non-Array collections just fine. In this context you can think of arrays as, more or less, ordered collections that are indexed by consecutive non-negative integers.

For example, both of these work:

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

Demo: http://jsfiddle.net/ambiguous/t8a83/

The arguments that the function gets depend on what sort of thing you're iterating over. If you're iterating over an array then you'd get the element and the index, if you're iterating over an Object then you'd get the value and key.

发布评论

评论列表(0)

  1. 暂无评论