从对象属性值返回最大数字

时间:2016-04-13 10:34:57

标签: javascript

我在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

8 个答案:

答案 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)

您可以迭代键并将值减小到最大值

&#13;
&#13;
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;
&#13;
&#13;

答案 7 :(得分:0)

好像你忘了申报&#34; var numb = 0&#34;,在你使用循环之前,请更改&#34; Math.max(json.rating [key])&#34;进入&#34; Math.max(麻木,json.rating [key])&#34; 然后,它将适当地进行