JavaScript/Underscore 获取对象中所有项目的最小最大值

JavaScript/Underscore get Min Max values for All Items in Object

我无法弄清楚如何从此对象中获取 min/max 值:

 "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
            }

我想获取 min/max 我正在调查 _.pluck 的数字(不是日期),但它需要密钥名称,但我不知道。这是日期....有什么办法可以绕过它吗?

您可以使用 _.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)];;

您可以在原版 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);

另一个纯 JS 选项是使用 Object.keys to get an array of the keys, map to get an array of the values, and finally 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 循环可能比上面的代码更多,但它可能快得多。