浏览Lo-Dash文档显示API属于以下类别:
更详细地了解Arrays API,可以看到大约30种适用于数组的不同方法。
Collections API除了Arrays API之外还有一些方法,它们不共享相同的方法。
在Collections API中,一个集合被描述为一个迭代的对象,可能是一个数组:
collection(Array | Object | string):要迭代的集合。
另外,有趣的是,有一个Collections API方法_.toArray
从集合中返回一个数组:
参数
collection(Array | Object | string):要转换的集合。返回
(Array):返回新转换的数组。
有人碰巧知道Lo-Dash API中数组和集合之间的形式差异吗?由于Backbone.js的原因,我认为这是一个区别,但是,现在我正在质疑我的推理,因为这些方法可能在其他地方可用。提前谢谢。
答案 0 :(得分:29)
查看更精细的Underscore.js documentation是一个好主意,从中可以得出这种区别。它声明:
集合函数适用于数组,对象和类似数组的对象,例如
arguments
,NodeList等。但它通过duck-typing工作,因此避免传递具有数字length
属性的对象。
基本上,"集合"是那些实现某种可迭代的东西的东西。接口,他们在内部使用相同的迭代方法(虽然Lodash源比Underscore更复杂)。所有"收集方法"在数组和对象(以及一些可迭代的东西)上都可以工作,而数组方法只应该用在数组上(或者可能是.length
和数字索引的所有东西),并且对象方法适用于任何对象。
答案 1 :(得分:10)
所有数组都是集合,但并非所有集合都是数组。对象(即{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/
函数的参数取决于你迭代的东西。如果你在一个数组上进行迭代,那么你将得到元素和索引,如果你在一个Object上迭代,那么你就得到了值和键。