2015-07-11 53 views
1

我正在通過數據庫進行排序,但基本上只是使用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顯示變量名稱如何獲取負責最小值的變量名稱?要做到這一點

回答

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 

這樣你就不需要爲每一個變量名做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函數是如何工作的,它是否通過每個變量,每次返回最低的那個,如果不是更小,它會返回原始的?非常感謝,儘管人完美! –

相關問題