【问题标题】:Lodash filter and functional compositionLodash过滤器和功能组成
【发布时间】:2016-03-07 23:17:34
【问题描述】:

我有一个带有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);});

它有效。就像每次迭代的值没有作为参数传递给函数一样。有什么帮助吗?谢谢

【问题讨论】:

  • 有趣!看着它,想起我为什么现在用 es6 :) (myArray.filter(a =&gt; a.media.length))

标签: javascript functional-programming underscore.js lodash


【解决方案1】:

_.filter() 方法的谓词使用三个参数调用:值、索引|键和集合。
使用 _.ary() 方法来限制方法接受的参数数量。
https://lodash.com/docs#ary

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

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

祝你好运!

【讨论】:

  • @Pandaiolo 感谢小提琴,伙计! :)
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多