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

时间:2018-01-30 18:05:41

标签: javascript loops object data-structures max

我有一个这样的对象:

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

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

我尝试使用Object.keys(),将数据抛出到Array并减少但最终所有这些方法都无法正常工作。我现在已经坚持这个问题几个小时了。

3 个答案:

答案 0 :(得分:5)

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

基本上,reduce函数将使用其键循环users对象,并将根据age值更改累加器。

"键"这个解决方案是:

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"]

  • reduce函数将循环键数组并保持accumulator(当前最高年龄)和currentValue(来自源数组{{1}的当前项})。

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

    • 要求currentValue,因为acc.age函数以空的initialValue reduce开头:

        

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

    • 如果{}具有之前的值,则此条件acc.age会在(users[curr].age > acc.age ? users[curr] : acc) : users[curr]accumulator之间进行交换(选择最高年龄)。



currentValue




@irkeninvader使用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)建议的解决方案:



for-loop




答案 1 :(得分:0)

您可以将数组作为最大年龄的结果集,因为您可以获得具有相同最大年龄的多个用户。

此提议使用对象的键并迭代它们并检查索引是否为零,或者如果最后一个结果用户的年龄小于实际用户,则使用实际键作为结果获取新数组。 / p>

如果年龄相等,则将实际用户密钥附加到结果集。如果没有返回最后的结果。

const
    users = { adam: { age: 28, extraInfo: 'foobar' }, brad: { age: 31, extraInfo: 'foobar' }, jef: { age: 12, extraInfo: 'baarfoo' } },
    maxAge = Object
        .keys(users)
        .reduce((r, k, i) => !i || users[r[0]].age < users[k].age
            ? [k]
            : users[r[0]].age === users[k].age
                ? r.concat(k)
                : r, []);

console.log(maxAge);

答案 2 :(得分:0)

   Here is code to find highest age object but I am not sure whether you can assign the result to a constant

  function highestAge( ageArray ) {
      var highest = null;
      for ( var key in ageArray ) {
            var val = ageArray[key];
             if( highest != null ) {
                 if ( highest.age < val.age ) {
                      highest = val;
                 }
             } else {
                 highest = val;
             }
           }
           return highest;
     }