查找对象的对象中属性的最大值

2023-12-10

我有一个这样的对象:

const users = {
 adam: {
   age: 28,
   extraInfo: 'foobar',
 },
 brad: {
   age: 31,
   extraInfo: 'foobar',
 },
 jef: {
   age: 12,
   extraInfo: 'baarfoo',
 },
};

如何检查哪个对象具有最高的值"age"属性并将此对象设置为常量?

我尝试过使用 Object.keys()、将数据扔到 Array 并减少,但最终,所有这些方法都没有按照我想要的方式工作。我已经在这个问题上停留了几个小时了。


您可以使用reduce函数查找年龄最高的对象。

基本上,reduce函数将循环users对象使用它的键,并将根据age value.

这个解决方案的“关键”是:

const result = Object.keys(users). reduce((acc, curr) =>    
   acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});

这是如何运作的:

  • Object.keys(users):此函数返回特定对象的键数组(在您的情况下)["adam", "brad", "jef"].

  • The reduce函数将循环键数组并保留accumulator(当前最高年龄)和currentValue(源数组中的当前项目Object.keys(users)).

  • acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {})该条件评估当前值accumulator and currentValue

    • Ask for acc.age因为reduce函数以空的初始值开始{}:

      用作回调第一次调用的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce() 是一个错误。

    • If acc.age具有先前的值,则此条件(users[curr].age > acc.age ? users[curr] : acc) : users[curr]之间进行交换accumulator and currentValue(选择最高年龄)。

const users = {
  adam: {
    age: 28,
    extraInfo: 'foobar',
  },
  brad: {
    age: 31,
    extraInfo: 'foobar',
  },
  jef: {
    age: 12,
    extraInfo: 'baarfoo',
  },
};

const result = Object.keys(users).reduce((acc, curr) =>    
       acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});

console.log(result)

建议的解决方案@irkeninvader using for-loop:

const users = {
 adam: {
   age: 28,
   extraInfo: 'foobar',
 },
 brad: {
   age: 31,
   extraInfo: 'foobar',
 },
 jef: {
   age: 12,
   extraInfo: 'baarfoo',
 },
};

var maxAge;
for(var key in users){
  if(!maxAge || users[key].age > maxAge.age){
    maxAge = users[key];
  }
}

console.log('Highest Age is:');
console.log(maxAge);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找对象的对象中属性的最大值 的相关文章

随机推荐