2012-07-29 59 views
1

我有一個數組滿對象:下劃線:裹陣列收集方法

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

我現在想的陣列封裝成下劃線Collection對象,這樣我可以nativly使用下劃線的收集方法(刪除,加)與它:

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

那麼,如何包裝一個陣列下劃線使用下劃線收集方法

+0

看看這個答案:http://stackoverflow.com/a/4929935/950890 – 2012-07-29 15:03:45

回答

2

一般強調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(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/#

+1

'_(OBJ)'*不*換'obj' – ggozad 2012-07-30 07:18:09

+0

@ggozad大〜 ! – 2012-07-30 10:05:45

+0

@hyogron check ggozad's answer〜 – 2012-07-30 10:06:47

7

對於因爲公認的答案記錄missleading:

下劃線用作函數,包裹它的參數,即

_([a, b, c]) 

相當於:

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

事實上chain被定義爲:

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

現在你的問題:

你分不清主幹提供收藏,以下劃線它沒有。骨幹集合可以很容易地從一個陣列初始化,例如:

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

將工作得很好。您可以進一步做到:

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

'_([a,b,c])'不等於'_.chain([a,b,c])' – Yaroslav 2013-04-27 12:08:48