2016-12-18 91 views
0

Lodash v4.17.2lodash鏈接如何工作?

有人能澄清如何鏈接工程?我只是沒有找到任何解釋lodash方法返回結果的文檔或博客。 在下面的代碼示例中,爲什麼第二個分配給filterAge不起作用?或者類似的鏈接更像jquery?如果任何人有資源解釋這一點,我會喜歡它。

let characters = [ 
 
    { 'name': 'barney1', 'age': 36, 'pets': ['hoppy'] }, 
 
    { 'name': 'barney2', 'age': 36, 'pets': ['hoppy'] }, 
 
    { 'name': 'barney3', 'age': 36, 'pets': ['hoppy'] }, 
 
    { 'name': 'barney4', 'age': 36, 'pets': ['hoppy'] }, 
 
    { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } 
 
]; 
 

 
let filterAge = _.take(_.slice(_.filter(characters, { 'age': 36 }), 2), 5); 
 
filterAge = _.filter(characters, { 'age': 36 }) 
 
      .slice(2) 
 
      .take(5); 
 

 
console.log(JSON.stringify(filterAge));
<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>

fiddle

回答

3

您可以在_(value)的描述中找到關於鏈接或序列的文檔以及庫的其他「Seq」函數/方法。

要與lodash鏈,你需要使用_(value)_.chain(value)創建序列,並在.value()末檢索結果。

在這些之間,每個lodash」等功能將是可利用的序列的方法,用2個差異:

  • 該方法返回保持當前值,而不是一個修飾的序列對象價值本身,除了.value()方法。

  • 第一個參數已被刪除。每個方法從它之前的序列對象中獲取值,而不是從參數中處理。而且,您傳遞給函數的其他參數向方法的左側移動一個位置。

對於示例:

filterAge = _.chain(characters) 
    .filter({ 'age': 36 }) 
    .slice(2) 
    .take(5) 
    .value(); 
1

爲了與lodash鏈,你需要用_()呼叫首套你的對象 - 這將允許調用任何lodash方法上包裝好的實例。然後,爲了獲得該值,您需要在包裝對象上調用value方法。所以,你的例子是這樣的:

filterAge = _(characters).filter({ 'age': 36 }) 
         .slice(2) 
         .take(5).value(); 

沒有包裝你的對象,你不能鏈函數調用,因爲你總是返回流向何方lodash方法,如take沒有實現的陣列。