2015-05-14 88 views
0

我需要做几个操作与给定的地图: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)进行回调,但是它进行了深入的比较,不适用于基本类型。

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

+0

你对'keys'的期望是什么? –

+0

已更新的代码示例。现在这里有意见与预期的结果 –

+0

我还不清楚你想要做什么。你是否想要替换调用'_.findKey'和'_.omit'并使用别的东西? –

回答

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

+0

太棒了!看起来这是通过lodash做到的最好方法。但是有显着的性能影响。所以我想用可以在一个函数中完成的方法来扩展lodash –