Lodash的条件链方法

时间:2016-01-23 11:27:31

标签: conditional lodash chain

// 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:也许最后还有一种更好的方法可以追加...

1 个答案:

答案 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 += ', ...';