我有一个充满对象的数组:
var myArray = [{ "user": "anton" }, { "user": "joe" }];
我现在想把数组包装成一个Underscore Collection对象,以便我可以使用下划线的收集方法(删除,添加):
myArray = _(myArray); // this only add object methods
myArray.add({ "user": "paul" });
那么如何用下划线包装数组以使用下划线收集方法
答案 0 :(得分:7)
对于记录,因为接受的答案是误导性的:
下划线用作函数,将包装其参数,即
_([a, b, c])
相当于:
_.chain([a, b, c])
实际上chain
定义为:
_.chain = function(obj) {
return _(obj).chain();
};
现在回答你的问题:
你混淆Backbone提供集合,而Underscore则没有。可以从阵列轻松初始化骨干集合,例如:
var c = new Backbone.Collection([{ "user": "anton" }, { "user": "joe" }]);
工作得很好。你可以进一步做:
c.add({ "user": "paul" });
答案 1 :(得分: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)
)返回一个包装对象。对此对象调用方法将继续返回包装对象,直到使用value。
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/#