在对象中查找具有最大值的键

问题描述 投票:-3回答:5

假设我有一个对象:

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

如何找到值最大的属性的名称?例如,这里:答案应该是“愤怒”,因为它的值“1.0”是最大的。感谢您的投入!

javascript algorithm object data-structures
5个回答
1
投票
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
投票

您将需要遍历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);
}

0
投票

您可以在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
投票

你可以试试这个

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
投票

您可以获得一个结果或多个名称结果,请按照我的代码:

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);
© www.soinside.com 2019 - 2024. All rights reserved.