Undercore:使用集合方法包裹数组

Underscore: Wrap array with collection methods

本文关键字:方法 包裹 数组 集合 Undercore      更新时间:2024-05-24

我有一个充满对象的数组:

var myArray = [{ "user": "anton" }, { "user": "joe" }];

我现在想把数组包装成一个Underscore Collection对象,这样我就可以在本地使用Underscore的收集方法(remove,add):

myArray = _(myArray); // this only add object methods
myArray.add({ "user": "paul" });

那么,我如何用下划线包装数组以使用下划线收集方法

由于接受的答案拼写错误,因此记录:

在用作函数的undercore中,包装其参数,即

_([a, b, c])

相当于:

_.chain([a, b, c])

事实上chain被定义为:

_.chain = function(obj) {
  return _(obj).chain();
};

现在回答您的问题:

您混淆了提供集合的Backbone和不提供集合的Undercore。主干集合可以很容易地从数组初始化,例如:

var c = new Backbone.Collection([{ "user": "anton" }, { "user": "joe" }]);

会很好用的。你可以进一步做:

c.add({ "user": "paul" });

通常下划线api不会包装数组或对象。只是传递它的第一个论点。ex)

_.first([5, 4, 3, 2, 1]); //Note first argument
=> 5
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]

但是chain(_.chain(obj))返回一个换行的对象。在此对象上调用方法将继续返回包装的对象,直到使用值为止。

var stooges = [{name : 'curly', age : 25}, {name : 'moe', age : 21}, {name : 'larry', age : 23}];
var youngest = _.chain(stooges)
  .sortBy(function(stooge){ return stooge.age; })
  .map(function(stooge){ return stooge.name + ' is ' + stooge.age; })
  .first()
  .value();
=> "moe is 21"

检查下划线api:http://underscorejs.org/#