我无法弄清楚如何从这个对象中获取最小值/最大值:
"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但它需要关键名称,但我不知道。它的日期......任何通过它的方式?
答案 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循环可能比上面的代码更多,但它可能要快得多。