2015-05-14 166 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 –