Lodash过滤器和功能组合

时间:2015-12-03 11:06:14

标签: javascript functional-programming underscore.js lodash

我有一个带有media键的对象数组,其值可能为空,也可能不为空。我有一个函数来选择该键值和一个检查该值为空的函数,以便mediaEmptyComparer({media: ''})返回true并且mediaEmptyComparer({media: 'somevalue'})为false。

    var array = _.times(100, function () { return {media: Math.random() < 0.5 ? '' : 'value'} });

    var mediaPicker        = _.partialRight(_.get, 'media');
    var mediaEmptyComparer = _.flow(mediaPicker, _.isEmpty);

    var splittedArray = _.filter(array, mediaEmptyComparer);
    console.log(splittedArray);

当我尝试将此函数用作_.filter的谓词时,它总是失败(如示例中所示),但如果我写:

    var splittedArray = _.filter(array, function (x) { return mediaEmptyComparer(x);});

它有效。就好像每个迭代的值不作为参数传递给函数。有帮助吗?感谢

1 个答案:

答案 0 :(得分:5)

使用三个参数调用_.filter()方法的谓词:value,index | key和collection。
使用_.ary()方法限制方法接受的参数数量 https://lodash.com/docs#ary

var splittedArray = _.filter(array, _.ary(mediaEmptyComparer, 1));

有关更多信息,请查看: https://github.com/lodash/lodash/issues/844

祝你好运!