1

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

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

我现在想将数组包装到一个下划线集合对象中,这样我就可以自然地使用下划线的集合方法(删除、添加):

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

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

4

2 回答 2

7

由于接受的答案具有误导性,因此记录在案:

下划线用作函数,包装其参数,即

_([a, b, c])

相当于:

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

实际上chain定义为:

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

现在回答你的问题:

您将提供 Collections 的 Backbone 与不提供 Collections 的 Underscore 混淆了。骨干集合可以很容易地从数组初始化,例如:

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

会工作得很好。你可以进一步做:

c.add({ "user": "paul" });
于 2012-07-30T07:16:57.107 回答
2

通常下划线 api 不包装数组或对象。只是传递它的第一个参数。前任)

_.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/#

于 2012-07-29T15:17:00.653 回答