![](/img/trans.png)
[英]Find object having maximum value for the `id` property in an array of objects
[英]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]
在accumulator
和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使用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.