簡體   English   中英

在對象的對象中查找屬性的最大值

[英]Find maximum value of property in object of objects

我有一個這樣的對象:

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值更改累加器。

該解決方案的“關鍵”是:

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"] Object.keys(users)返回鍵數組。

  • reduce函數將循環鍵數組,並保留一個accumulator (當前最高年齡)和一個currentValue (源Array Object.keys(users)當前項)。

  • acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {}) acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {}) ,該條件評估accumulator的當前值和currentValue

    • 要求acc.age因為reduce函數以空的initialValue {}開頭:

      用作首次調用回調的第一個參數的值。 如果未提供初始值,則將使用數組中的第一個元素。 在沒有初始值的空數組上調用reduce()是錯誤的。

    • 如果acc.age具有先前的值,則此條件(users[curr].age > acc.age ? users[curr] : acc) : users[curr]accumulatorcurrentValue之間進行交換(選擇最高年齡)。

 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使用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); 

您可以將一個數組作為最大年齡的結果集,因為您可以獲得多個具有相同最大年齡的用戶。

該建議使用對象的鍵並對其進行迭代,並檢查索引是否為零,或者最后一個結果用戶的年齡小於實際用戶的年齡,然后采用帶有實際鍵的新數組作為結果。

如果年齡相等,則將實際的用戶密鑰附加到結果集。 如果沒有返回最后的結果。

 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); 

   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;
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM