我在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
},
似乎麻木没有像我想象的那样返回最高数字。
它返回92
答案 0 :(得分:1)
<强>问题:强>
这里的主要问题是你只是迭代对象键并重写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
。
答案 1 :(得分:0)
函数Math.max()
采用一系列数字并返回该序列中的最高位。
在你的情况下:你每次只用一个参数多次调用max()
,每次max()
只返回那个参数。所以,无论你在最后一次通话中传递的是numb
的最终值。
解决方案1:使用循环构建数字列表,然后调用max()
一次并传递该列表。但是,这会对您的数字序列进行两次迭代(请注意使用spread operator。)
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);
答案 2 :(得分:0)
您应该首先将numb声明为您可以预期的最小值,然后在迭代循环时,将现有值传递给当前值进行测试。
var numb = -999999;
for( var key in json.rating ) {
numb = Math.max(numb, json.rating[key]);
}
console.log(numb);
答案 3 :(得分:0)
您应该计算最大值。一种方法是:
var maxNumber = -Infinity;
for (var key in json.rating) {
maxNumber = Math.max(maxNumber, json.rating[key]);
}
console.log(maxNumber);
这样,您不断地将当前值与保存的最大值进行比较
答案 4 :(得分:0)
你可以这样做:
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));
答案 5 :(得分:0)
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 );
答案 6 :(得分:0)
您可以迭代键并将值减小到最大值
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);
&#13;
答案 7 :(得分:0)
好像你忘了申报&#34; var numb = 0&#34;,在你使用循环之前,请更改&#34; Math.max(json.rating [key])&#34;进入&#34; Math.max(麻木,json.rating [key])&#34; 然后,它将适当地进行