2016-01-23 72 views
1
// node lodash_conditional_chain_method.js 
_ = require('lodash'); 

var data = [{ 
    label: 'Alice' 
}, { 
    label: 'Bob' 
}, { 
    label: 'Charlie' 
},{ 
    label: 'Dave' 
},{ 
    label: 'Eve' 
}]; 

function getLabelString(entries, maxEntries) { 
    var s = 'Labels: '; 
    var chain = _.chain(entries); 

    // conditional chain method 
    if (maxEntries !== undefined) { 
     chain = chain.take(maxEntries); 
    } 

    s += chain 
     .map('label') 
     .sort() 
     .join(', ') 
     .value(); 

    if (maxEntries !== undefined && _.size(entries) > maxEntries) { 
     s += ', ...'; 
    } 

    return s; 
} 

console.log(getLabelString(data)); 
// Labels: Alice, Bob, Charlie, Dave, Eve 

console.log(getLabelString(data, 3)); 
// Labels: Alice, Bob, Charlie, ... 

我使用lodash創建concatinated標籤String。鏈接期間,我有一個鏈式方法(take),只有在定義了maxEntries值時才應該執行該方法。目前我這樣做,用if-陳述。使用Lodash的條件鏈方法

有沒有辦法以更「連鎖」的方式做到這一點?

ps:也許還有一個更好的方法在末尾附加...

回答

3

試試這個與slice

var maxLen = (maxEntries !== undefined)? maxEntries: entries.length; 
s += _.chain(data) 
     .map('label') 
     .slice(0, maxLen) 
     .sort() 
     .join(', ') 
     .value(); 
if (maxLen < entries.length) 
    s += ', ...';