2016-04-13 2 views
-1

у меня есть следующий:возврат имущества из объекта с наибольшим значением

$.ajax({ 
      url: 'https://api.m.hostelworld.com/1.5/properties/'+propID+'/?update-cache=true', 
      dataType: 'json', 
      headers: { 
      "Accept-Language": lang 
      }, 
      success: function(json) { 
      var numb = 0; 
      var property; 
      for (var key in json.rating) { 
       numb = Math.max(numb, json.rating[key]); 
       if(json.rating[key] == numb){ 
        console.log(property with the highestNumb); 
       } 
      } 
      highestNumb = numb; 
      return highestNumb; 

      }, cache: false 
}); 

и мой объект, как это:

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

highestNumb вар возвращает наибольшее значение из всех из них, как могу ли я вернуть свойство, связанное с самым высоким значением, может быть случай, когда 2 свойства будут иметь такое же самое высокое значение.

высшийNumb вернется 94, но я также хочу получить доступ к собственности, связанной с 94 в этом случае чистотой.

+1

Вы не можете вернуться из обработчика обратного вызова асинхронного вызова методу вызывающего метода. – gurvinder372

+1

Что делать, если два свойства имеют одинаковую высоту? Просто верните любой из них? –

+0

@ gurvinder372 уверен, что вы можете ... это просто никуда не денется. – canon

ответ

1

Если предположить, что объект является

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

Вы можете сделать:

var maxValue = -1; 
var maxKey; 
for (var key in obj.rating) { 
    if (obj.rating[key] > maxValue) { 
    maxValue = obj.rating[key]; 
    maxKey = key; 
    } 
} 

console.log(maxKey) // cleanliness 

Обратите внимание, что если два свойства имеют одинаковое значение, то это будет возвращать тот, который был столкнулся первый.

1

наивысший результат будет возвращен 94, но я также хочу получить доступ к объекту , связанному с 94 в этом случае чистотой.

Вы должны помнить, ключ с наибольшим значением

Сделать

success: function(json) { 
     var numb = 0; 
     var highestProp;  
     for (var key in json.rating) { 
      if (json.rating[key] > numb) 
      { 
       numb = json.rating[key]; 
       highestProp = key; 
      }     
     } 
     return highestProp; 
     } 

DEMO

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

 
var numb = 0; 
 
var highestProp; 
 
for (var key in rating) 
 
{ 
 
    if (rating[key] > numb) 
 
    { 
 
    numb = rating[key]; 
 
    highestProp = key; 
 
    } 
 
} 
 
alert("highest property " + highestProp); 
 
alert("highest value " + numb);

+0

highProp всегда возвращает последнее свойство или значение – Alex

+0

@Alex это не для меня, проверьте прилагаемую демонстрационную версию – gurvinder372

Смежные вопросы