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 循环可能比上面的代码更多,但它可能快得多。
我无法弄清楚如何从此对象中获取 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 循环可能比上面的代码更多,但它可能快得多。