在JavaScript对象中查找哪个键值对等于X?

时间:2015-07-11 22:47:18

标签: javascript

我正在整理数据库,但基本上只是使用javascript对象。在这个对象里面我有变量,我需要找到最低的变量。我已经这样做但是为了做到这一点,我必须找到值,这个值不是值等于的键值对的名称,我怎么能找到哪个值负责最低的结果?

这是数据库对象:

        {
            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];

};

所以我发现每个变量的值是一个整数值,但是我不想显示我想要显示变量名的数字我可以得到负责最小值的变量名吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是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

这样您就不需要为每个变量名称执行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;
      }
  });
}