2013-07-28 30 views
0

在underscore.js中使用uniq()方法時,我們可以選擇使用函數方法或面向對象的方法。通常,uniq()需要一個數組,一個isSorted布爾值和一個iterator函數。布爾值用於表示數組是否已被排序。您可以對數組進行排序,然後通過true以獲得更好的性能(顯然)。_.chain()中的方法參數

它可能是這個樣子:

var data = [ 
    {'make':'Porsche','model':'911'}, 
    {'make':'Porsche','model':'986'}, 
    {'make':'Porsche','model':'986'} 
]; 

var results = _.uniq(data, true, function (obj) {return obj.model}); 

然而,對於鏈接的版本工作,我不得不做這樣的事情:

var results = _.chain(data) 
    .uniq(function (obj) {return obj.model}) 
    .value(); 

所以,在鏈接的版本, isSorted參數在哪裏去?

回答

2

鏈接版本將應用相同的函數,只有被包裝值補充,因此它採用相同的參數。相當於

_.uniq(data, true, function (obj) {return obj.model}); 

_(data).uniq(true, function (obj) {return obj.model}); 

和你的調用沒有true(該isSorted參數是可選的,你可以把iterator映射器作爲第二個參數爲好)將相當於

_.uniq(data, function (obj) {return obj.model});