p7a*_*ams 0 javascript loops object max data-structures
我有一个这样的对象:
const users = {
adam: {
age: 28,
extraInfo: 'foobar',
},
brad: {
age: 31,
extraInfo: 'foobar',
},
jef: {
age: 12,
extraInfo: 'baarfoo',
},
};
Run Code Online (Sandbox Code Playgroud)
如何检查哪个对象具有“ 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], {});
Run Code Online (Sandbox Code Playgroud)
工作原理:
Object.keys(users)
:在您的情况下,此函数从特定对象返回键数组["adam", "brad", "jef"]
。
该reduce
函数将循环键数组,并保持accumulator
(当前最高年龄)和currentValue
(源Array中的当前项Object.keys(users)
)。
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 result = Object.keys(users). reduce((acc, curr) =>
acc.age ? (users[curr].age > acc.age ? users[curr] : acc) : users[curr], {});
Run Code Online (Sandbox Code Playgroud)
@irkeninvader使用for-loop
以下方法建议的解决方案:
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)
Run Code Online (Sandbox Code Playgroud)