我有一个这样的对象:
const users = {
adam: {
age: 28,
extraInfo: 'foobar',
},
brad: {
age: 31,
extraInfo: 'foobar',
},
jef: {
age: 12,
extraInfo: 'baarfoo',
},
};
如何检查哪个对象具有" age" 属性的最高值并将此对象设为常量?
我尝试使用Object.keys(),将数据抛出到Array并减少但最终所有这些方法都无法正常工作。我现在已经坚持这个问题几个小时了。
答案 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;
}