在JavaScript对象中查找哪个键值对等于X?
问题描述:
我正在通过数据库进行排序,但基本上只是使用JavaScript对象。在这个对象内部我有变量,我需要找到最低的变量。我已经这样做了,但要做到这一点,我必须找到数字的值,而不是数值相等的键值对的名称,我怎么能找到哪个值负责最低的结果?在JavaScript对象中查找哪个键值对等于X?
这里是数据库对象:
{
cave: cave,
environment: {
activity: activity,
recovery: recovery,
psychology: psychology
},
variable: {
training: training,
mobility: mobility,
sleep: sleep,
nutrition: nutrition,
stress: stress,
motivation: motivation
},
date: moment().format('ll'),
user: Meteor.user().username
}
所以,我去到这一点,并利用这一发现的最低所有的变量:
Math.min(
findVariable(0, 'training'),
findVariable(0, 'mobility'),
findVariable(0, 'sleep'),
findVariable(0, 'nutrition'),
findVariable(0, 'stress'),
findVariable(0, 'motivation')
)
和findVariable是这样的:
findVariable = function(dayOffset, findValue){
var log = dailyLog.find({user: Meteor.user().username, date: findDate(dayOffset)}).fetch()[0];
return log.variable[findValue];
};
所以我找到每个变量的值是一个整数值,但我不想显示数字我哇nt显示变量名称如何获取负责最小值的变量名称?要做到这一点
答
一种方法是reduce在你variables
:
var variables = {
training: 1,
mobility: 4,
sleep: 6,
stress: 5
};
var lowestVariable = Object.keys(variables).reduce(function (lowest, variable) {
if (variables[variable] < variables[lowest]) {
return variable;
} else {
return lowest;
}
});
// training
这样你就不需要为每一个变量名做AA dailyLog.find
,而不是你可以只是看日志一次,然后减少在variable
属性:
findLowest = function (dayOffset) {
var log = dailyLog.find({user: Meteor.user().username, date: findDate(dayOffset)}).fetch()[0];
return Object.keys(log.variable).reduce(function (lowest, variable) {
if (log.variables[variable] < log.variables[lowest]) {
return variable;
} else {
return lowest;
}
});
}
它的作品魅力,颠倒它的最高变量也完美。虽然我很困惑! reduce函数是如何工作的,它是否通过每个变量,每次返回最低的那个,如果不是更小,它会返回原始的?非常感谢,尽管人完美! –