Lodash等于功能

时间:2015-05-14 09:34:30

标签: javascript functional-programming underscore.js lodash

我需要使用给定的地图进行多项操作:

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)进行回调,但它会进行深入的比较并且无法处理原始类型。

当然,我可以自己创建它,但我正在寻找一种以常见方式实现它的方法。

1 个答案:

答案 0 :(得分:2)

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

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()。然后将其与集合中的每个值进行比较。