[英]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.