Найти ключ с наибольшим значением в объекте - PullRequest
0 голосов
/ 06 декабря 2018

Допустим, у меня есть объект:

{Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"}

Как найти имя свойства, значение которого является наибольшим?Например, здесь: ответ должен быть «Angry», потому что его значение «1.0» является наибольшим.Спасибо за ваш вклад!

Ответы [ 5 ]

0 голосов
/ 06 декабря 2018
var maxValue = 0;
var keyVal;
var object = {Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: 
"0.0"};
for (var key in object) {
    let tempValue = parseFloat(object[key]);
    if(maxValue < tempValue) {
          maxValue = tempValue;
          keyVal = key;
    }
}

console.log(keyVal);
// expected output: "Angry"
0 голосов
/ 06 декабря 2018

Вы можете получить один или несколько результатов имен, следуя моему коду:

var obj_1= {Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"};
var obj_2 = {Angry: "1.0", Fearful: "1.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"};
//get only one name max
var result1 = Object.entries(obj_1).sort((a,b)=>(b[1]-a[1]));
console.log(result1[0][0]);

//get list of names max
var list_names = [];
var result2 = Object.entries(obj_2).sort((a,b)=>(b[1]-a[1]));
result2 = result2.filter(current=>{
    if(current[1]==result2[0][1]){
        list_names.push(current[0]);
        return current;
    }
})
// console.log(result2);
console.log(list_names);
0 голосов
/ 06 декабря 2018

Вы можете reduce превысить Object.keys, используя объект-аккумулятор для отслеживания текущего наибольшего значения, которое вы нашли.

const obj = {Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"}

const largest = Object.keys(obj).reduce((largest, key, i) => {
  obj[key] = parseFloat(obj[key])

  largest = obj[key] > largest.num
    ? { key, num: obj[key] }
    : largest

  return i === Object.keys(obj).length - 1 ? largest.key : largest
}, {
  key: null,
  num: 0
})

console.log(largest)
0 голосов
/ 06 декабря 2018

Вы можете попробовать это

let obj ={Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"}

let max= -Infinity;
let keyName;

for(let key in obj){
  let temp  = parseFloat(obj[key]);
  if(temp>max){
    max=temp;
    keyName = key 
  }
}

console.log("Max value is:-" ,max, "\nProperty Name is :-", keyName)
0 голосов
/ 06 декабря 2018

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

var guy1 = {Angry: "1.0", Fearful: "0.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"};
var guy2 = {Angry: "1.0", Fearful: "2.0", Happy: "0.0", Neutral: "0.0", Sad: "0.0"};
var guy3 = {Angry: "1.0", Fearful: "2.0", Happy: "4.0", Neutral: "0.0", Sad: "0.0"};

biggest(guy1);
biggest(guy2);
biggest(guy3);


function biggest(obj) {
   var max = 0;
   var emotion; 

   Object.keys(obj).forEach(function(e){
     if(max<Number(obj[e])) { max = Number(obj[e]); emotion = e; }
   });

   console.log(emotion, max);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...