2014-02-26 51 views
3

我想用下劃線找到最小值的關鍵字。例如:如何在帶下劃線的散列中找到最小值的關鍵字

var my_hash = {'0-0' : {value: 23, info: 'some info'}, 
       '0-23' : {value: 8, info: 'some other info'}, 
       '0-54' : {value: 54, info: 'some other info'}, 
       '0-44' : {value: 34, info: 'some other info'} 
       } 
find_min_key(my_hash); => '0-23' 

如何使用underscorejs做到這一點?

我已經試過:

_.min(my_hash, function(r){ 
    return r.value; 
}); 
# I have an object with the row, but not it's key 
# => Object {value: 8, info: "some other info"} 

我也試着對它進行排序(然後獲得第一個元素):

_.sortBy(my_hash, function(r){ 
    return r.value; 
}) 

但它返回一個數字索引數組,所以我的哈希密鑰丟失。

回答

6

以下劃線或Lodash < 4:

_.min(_.keys(my_hash), function(k) { return my_hash[k].value; }); //=> 0-23

隨着Lodash> = 4:

_.minBy(_.keys(my_hash), function(k) { return my_hash[k].value; }); //=> 0-23

3

你可以用reduce做到這一點:

var result = _.reduce(my_hash, function(memo, val, key) { 
    if (val.value < memo.value || _.isNull(memo.value)) { 
    return {key: key, value: val.value}; 
    } else { 
    return memo; 
    } 
}, {key: "none", value: null}); 
console.log(result.key); 

輸出:

0-23 
3
_.reduce(my_hash, function(m, v, k, l) { 
    if (v.value <= l[m].value) { 
    m = k; 
    } 
    return m; 
}, '0-0'); 
相關問題