// 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创建一个连接标签String。在链接期间,我有一个链方法(take
),只有在定义了maxEntries
值时才能执行。目前,我使用if
语句执行此操作。
有没有办法以更“连锁”的方式做到这一点?
ps:也许最后还有一种更好的方法可以追加...
?
答案 0 :(得分: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 += ', ...';