簡體   English   中英

從對象屬性值返回最大數

[英]return the highest number from object properties value

我在ajax調用中包含以下內容:

        for (var key in json.rating) {
            var numb = Math.max(json.rating[key]);
        }
        console.log(numb);

"rating":{
"overall": 92,
"atmosphere": 93,
"cleanliness": 94,
"facilities": 89,
"staff": 94,
"security": 92,
"location": 88,
"valueForMoney": 92
},

似乎numb並沒有返回我認為的最高數字。

回來了92

問題:

這里的主要問題是,您只是在迭代對象鍵並重寫numb變量中的鍵值,因為您僅將一個參數傳遞給了Math.max() ,這是迭代的數字。

因此,您將始終獲得最后的迭代值,這說明了為什么得到92的原因。

解:

實際上,您應該初始化numb vraiable,並始終將其與每個迭代值進行比較,這是一個編輯后的代碼段:

 var json = { "rating": { "overall": 92, "atmosphere": 93, "cleanliness": 94, "facilities": 89, "staff": 94, "security": 92, "location": 88, "valueForMoney": 92 } }; var numb = 0; for (var key in json.rating) { numb = Math.max(json.rating[key], numb); } document.write(numb); 

注意:

假設所有值都是正數,這就是為什么我將其初始化為0的原因,否則將numb初始化為-Infinity

函數Math.max()接受一個數字序列,並返回該序列的Math.max()

在您的情況下:您多次調用max()且每次僅使用一個參數,並且每次max()僅返回該參數。 因此,無論您在上一次調用中傳遞的是numb的最終值。

解決方案1:使用循環建立數字列表,然后一次調用max()並傳遞該列表。 但是,這會在您的數字序列上進行兩次迭代(請注意使用散布運算符 。)

numbers = []
for (var key in json.rating) {
    numbers.push(json.rating[key]);
}
numb = Math.max(...numbers);
console.log(numb);

解決方案2:保留最大值並將其與當前迭代的值進行比較。 這只會對您的數字序列進行一次迭代。

numb = Number.MIN_VALUE;
for (var key in json.rating) {
    numb = Math.max(numb, json.rating[key]);
}
console.log(numb);

首先,應將numb聲明為期望的最小值,然后在循環遍歷時,將現有值傳遞給當前值以進行測試。

    var numb = -999999;
    for( var key in json.rating ) {
      numb = Math.max(numb, json.rating[key]);
    }
    console.log(numb);

您應該計算最大值。 一種方法是:

var maxNumber = -Infinity;
for (var key in json.rating) {
    maxNumber = Math.max(maxNumber, json.rating[key]);
}
console.log(maxNumber);

這樣,您可以不斷比較當前值和保存的最大值

您可以這樣操作:

var rating = {
"overall": 92,
"atmosphere": 93,
"cleanliness": 94,
"facilities": 89,
"staff": 94,
"security": 92,
"location": 88,
"valueForMoney": 92
}

//get all the values in an array
var allvalues = Object.keys(rating).map(function(key){return rating[key];});

// get the max value from the array
console.log(Math.max.apply(null, allvalues)); 
  var rating = {
      "overall": 92,
      "atmosphere": 93,
      "cleanliness": 94,
      "facilities": 89,
       "staff": 94,
       "security": 92,
       "location": 88,
       "valueForMoney": 92
 };

 var arr = Object.keys( rating ).map(function ( key ) { return rating[key]; });
 var min = Math.min.apply( null, arr );
 var max = Math.max.apply( null, arr );

 console.log( 'Min value: ' + min + ', max value: ' + max );

您可以遍歷鍵並將其值減小到最大值。

 var rating = { atmosphere: 85, cleanliness: 91, facilities: 91, staff: 85, security: 94, location: 78, valueForMoney: 85 }, hi = Object.keys(rating).reduce(function (r, k) { return Math.max(r, rating[k]); }, -Number.MAX_VALUE); document.write(hi); 

好像您忘了聲明“ var numb = 0”,在使用循環之前,請將“ Math.max(json.rating [key])”更改為“ Math.max(numb,json.rating [key])” ”,那么它將適當地進行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM