JavaScript /下划线获取对象中所有项目的最小值

时间:2015-02-09 01:15:33

标签: javascript underscore.js

我无法弄清楚如何从这个对象中获取最小值/最大值:

 "Prices" : {                                                                                                                                                                                                                                  
                "2014,1,11,0,0,0" : 1089,                                                                                                                                                                                                            
                "2014,1,12,0,0,0" : 1081,                                                                                                                                                                                                            
                "2014,1,13,0,0,0" : 1077,                                                                                                                                                                                                            
                "2014,1,14,0,0,0" : 1069,                                                                                                                                                                                                            
                "2014,1,17,0,0,0" : 1078,                                                                                                                                                                                                            
                "2014,1,18,0,0,0" : 1089,                                                                                                                                                                                                            
                "2014,1,19,0,0,0" : 1095
            }

我想得到数字的最小值/最大值(不是日期)我正在调查_.pluck但它需要关键名称,但我不知道。它的日期......任何通过它的方式?

3 个答案:

答案 0 :(得分:2)

你可以在vanilla Javascript中使用for..in循环或Object.keys(),我确定Underscore也有这些包装器。

var p = {
  '2014,1,11,0,0,0': 1089,
  '2014,1,12,0,0,0': 1081,
  '2014,1,13,0,0,0': 1077,
  '2014,1,14,0,0,0': 1069,
  '2014,1,17,0,0,0': 1078,
  '2014,1,18,0,0,0': 1089,
  '2014,1,19,0,0,0': 1095
};
var min = Number.POSITIVE_INFINITY;
var max = Number.NEGATIVE_INFINITY;
for (var prop in p) {
  if (p.hasOwnProperty(prop)) {
    min = Math.min(min, p[prop]);
    max = Math.max(max, p[prop]);
  }
}
console.log('min: ' + min);
console.log('max: ' + max);

答案 1 :(得分:1)

您可以使用_.values(prices)。使用此方法,您可以使用_.keys(prices)并将其用作查找正确的密钥。

http://jsfiddle.net/x7eewf1d/2/

虽然它可能没有其他解决方案那么高效,但它会向下一位开发人员(可能是您)清楚地说明发生了什么。

var prices = {
  '2014,1,11,0,0,0': 1089,
  '2014,1,12,0,0,0': 1081,
  '2014,1,13,0,0,0': 1077,
  '2014,1,14,0,0,0': 1069,
  '2014,1,17,0,0,0': 1078,
  '2014,1,18,0,0,0': 1089,
  '2014,1,19,0,0,0': 1095
};

var vals = _.values(prices);
var dates = _.keys(prices);

var min = _.min(vals);
var max = _.max(vals);

var minDate = dates[vals.indexOf(min)];
var maxDate = dates[vals.indexOf(max)];;

答案 2 :(得分:0)

另一个普通的JS选项是使用Object.keys来获取键的数组,map来获取值的数组,最后使用Math.max来获取最大值:

var p = {
  '2014,1,11,0,0,0': 1089,
  '2014,1,12,0,0,0': 1081,
  '2014,1,13,0,0,0': 1077,
  '2014,1,14,0,0,0': 1069,
  '2014,1,17,0,0,0': 1078,
  '2014,1,18,0,0,0': 1089,
  '2014,1,19,0,0,0': 1095
};

Math.max.apply(Math, Object.keys(p).map(function(key) {return p[key]})); // 1095

并获得最低限度:

Math.min.apply(Math, Object.keys(p).map(function(key) {return p[key]})); // 1069

for..in循环可能比上面的代码更多,但它可能要快得多。