【问题标题】:Lodash equals functionLodash等于函数
【发布时间】:2015-05-14 09:34:29
【问题描述】:

我需要用给定的地图做几个操作:

var keys = {
  a: 1,
  b: 2,
  c: 1,
  d: 2,
  e: 2
}
_.findKey(keys, function(value) {
   return value === 2;
}); // "b"
_.omit(keys, function(value) {
   return value === 2;
}); // {a: 1, c: 1}

我想通过比较立即创建回调。像这样的

function equals(lhs) {
    return function(rhs) {
        return lhs === rhs;
    };
}

lodash 或下划线是否具有与此功能等效的功能?我尝试通过_.matches(2) 进行回调,但它会进行深度比较并且不适用于原始类型。

当然,我可以自己创建它,但我正在寻找一种通用的方法。

【问题讨论】:

  • 您期望keys 的输出是什么?
  • 更新了代码示例。现在这里是具有预期结果的 cmets
  • 我仍然不清楚您要做什么。您是否尝试替换调用 _.findKey_.omit 并使用其他内容?
  • 我想为_.findKey_.omit 和其他人生成回调,它将传递的值与一些常量进行比较
  • 我不是你会这样做,但我很确定你可以使用最新版本的下划线和 _.mapObject 函数来遍历对象并获得你想要的结果。

标签: javascript functional-programming underscore.js lodash


【解决方案1】:

不确定我是否完全理解你的问题,但这是我对你所追求的最好的猜测。

function equals(val) {
    return _.ary(_.partial(_.isEqual, val), 1);
}

_.findKey(keys, equals(2));
// → 'b'

_.omit(keys, equals(2));
// { a: 1, c:1 }

这里,equals() 将返回一个回调函数。它使用ary() 来确保只传递一个参数。它使用partial()val 参数应用于isEqual()。然后将其与集合中的每个值进行比较。

【讨论】:

  • 太棒了!看起来这是通过 lodash 做到这一点的最佳方式。但是有显着的性能影响。所以我想用可以在一个函数中完成的方法来扩展 lodash
猜你喜欢
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
相关资源
最近更新 更多