在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; 
     } 
    }); 
} 
+0

它的作品魅力,颠倒它的最高变量也完美。虽然我很困惑! reduce函数是如何工作的,它是否通过每个变量,每次返回最低的那个,如果不是更小,它会返回原始的?非常感谢,尽管人完美! –